gpt4 book ai didi

ruby-on-rails - 不选择 updated_at 属性就无法在 Rails 4 中更新模型

转载 作者:数据小太阳 更新时间:2023-10-29 07:32:08 24 4
gpt4 key购买 nike

我正在从 Rails 3.2.13 升级到 4,在更新模型时遇到了问题。我正在尝试更新只有 id 的模型上的单个属性,我还想要验证和回调。这在 Rails 3 中运行良好,但我在 Rails 4 中遇到了问题。

如果我这样做,在 rails 4 中:

user = User.select(:id).first
user.first_name = 'name'
user.save!

我得到错误:

NoMethodError: undefined method `type_cast' for nil:NilClass
from C:/RailsInstaller/Ruby2.0.0/lib/ruby/gems/2.0.0/gems/activerecord-4.0.3/lib/active_record/attribute_methods/time_zone_conversion.rb:10:in `type_cast'

如果我在 Rails 3 中运行相同的代码,first_name 会更新,updated_at 会更新为 current_time。

如果在 rails 4 中运行:

user = User.select(:id, :updated_at).first
user.first_name = 'name'
user.save!

一切正常。

我假设错误是由于 updated_at 列不存在这一事实引起的,但它不应该存在。在我的许多查询中,我只选择 id 来提高速度。 Rails 3 完美地处理了这个问题。我也使用 update_attributes 尝试过这个,但我收到了同样的错误。它在我使用 update_column 时有效,但随后它会跳过我想要的验证和回调。

我不确定为什么这会在 Rails 4 中发生,或者如何在不在 update_column 之后显式调用验证和回调或选择我不需要做的 updated_at 属性的情况下绕过。

最佳答案

我也遇到过。

问题似乎是未加载 updated_at。当您更新属性时,它也会尝试更新 updated_at。它会尝试找到对该列进行类型转换的方法,但由于未选择,该列在某处未加载。

对我来说,这是 Rails 中的一个错误。但也许它的本意就是那样。

一旦我在独立的 ruby​​ 文件中重现错误,我将在 GitHub 上的 rails/rails 上打开一个问题。将使用链接更新这篇文章。

关于ruby-on-rails - 不选择 updated_at 属性就无法在 Rails 4 中更新模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22082187/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com