ActiveRecord 中的 ArgumentError小时超出范围

问题描述

我无法解决旧版 MysqL 数据库的问题。我相信罪魁祸首是其中一个字段的类型设置错误(它包含以毫秒为单位的时间,适配器不希望具有 DateTime 类型),不幸的是我无法更改它。 会发生什么(使用 Ruby on Jets):

2.5.8 :001 > User.all.each {|u| puts u.inspect};mil
Traceback (most recent call last):
       16: from /home/ngw/.rvm/gems/ruby-2.5.8/gems/activerecord-6.0.3.4/lib/active_record/relation.rb:250:in `records'
       15: from /home/ngw/.rvm/gems/ruby-2.5.8/gems/activerecord-6.0.3.4/lib/active_record/relation.rb:626:in `load'
       14: from /home/ngw/.rvm/gems/ruby-2.5.8/gems/activerecord-6.0.3.4/lib/active_record/relation.rb:808:in `exec_queries'
       13: from /home/ngw/.rvm/gems/ruby-2.5.8/gems/activerecord-6.0.3.4/lib/active_record/relation.rb:839:in `skip_query_cache_if_necessary'
       12: from /home/ngw/.rvm/gems/ruby-2.5.8/gems/activerecord-6.0.3.4/lib/active_record/relation.rb:821:in `block in exec_queries'
       11: from /home/ngw/.rvm/gems/ruby-2.5.8/gems/activerecord-6.0.3.4/lib/active_record/querying.rb:46:in `find_by_sql'
       10: from /home/ngw/.rvm/gems/ruby-2.5.8/gems/activerecord-6.0.3.4/lib/active_record/connection_adapters/MysqL/database_statements.rb:12:in `select_all'
        9: from /home/ngw/.rvm/gems/ruby-2.5.8/gems/activerecord-6.0.3.4/lib/active_record/connection_adapters/abstract/query_cache.rb:107:in `select_all'
        8: from /home/ngw/.rvm/gems/ruby-2.5.8/gems/activerecord-6.0.3.4/lib/active_record/connection_adapters/abstract/database_statements.rb:70:in `select_all'
        7: from /home/ngw/.rvm/gems/ruby-2.5.8/gems/activerecord-6.0.3.4/lib/active_record/connection_adapters/abstract/database_statements.rb:489:in `select'
        6: from /home/ngw/.rvm/gems/ruby-2.5.8/gems/activerecord-6.0.3.4/lib/active_record/connection_adapters/MysqL/database_statements.rb:46:in `exec_query'
        5: from /home/ngw/.rvm/gems/ruby-2.5.8/gems/activerecord-6.0.3.4/lib/active_record/connection_adapters/abstract_MysqL_adapter.rb:210:in `execute_and_free'
        4: from /home/ngw/.rvm/gems/ruby-2.5.8/gems/activerecord-6.0.3.4/lib/active_record/connection_adapters/MysqL/database_statements.rb:48:in `block in exec_query'
        3: from /home/ngw/.rvm/gems/ruby-2.5.8/gems/activerecord-6.0.3.4/lib/active_record/connection_adapters/MysqL/database_statements.rb:48:in `to_a'
        2: from /home/ngw/.rvm/gems/ruby-2.5.8/gems/activerecord-6.0.3.4/lib/active_record/connection_adapters/MysqL/database_statements.rb:48:in `each'
        1: from /home/ngw/.rvm/gems/ruby-2.5.8/gems/activerecord-6.0.3.4/lib/active_record/connection_adapters/MysqL/database_statements.rb:48:in `utc'
ArgumentError (hour out of range)

我试图修补这个,但我认为我修补的不是正确的东西,看起来要改变的是适配器(哎哟...)。 我见过其他更改过的 ActiveSupport 但它对我不起作用,而且基本上我无法在 ActiveRecord 崩溃的情况下遍历我的记录。我什至无法解决问题,我不知道为什么,但 rescue ArgumentError 不会被该异常触发。 有没有人遇到过这个问题并设法禁用记录的 AR 解析?获得使 AR 和 / 1000 崩溃的值就足够了,但我显然找不到办法做到这一点。

型号:

class User < ApplicationRecord
  self.table_name = :user
  self.primary_key = :user_id

  alias_attribute :first_name,'user_firstname'
  alias_attribute :last_name,'user_lastname'
  alias_attribute :email,'user_email'
  alias_attribute :phone,'user_contact_number'
  alias_attribute :job_title,'user_job_title'
  alias_attribute :contact_status,'user_contact_status'
  alias_attribute :created_at,'user_created'

  # has_one :settings,class_name: 'UserSettings'
  # has_many :cases,foreign_key: :created_by_user_id
  # has_many :subscriptions,-> { order('id DESC') }
  # has_many :orders,foreign_key: :user_id
end

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)