gpt4 book ai didi

ruby-on-rails - column_types 在 Rails 4.0.1 中为 nil

转载 作者:行者123 更新时间:2023-12-01 10:50:56 25 4
gpt4 key购买 nike

我正在尝试将 Rails 从 4.0.0 升级到 4.0.2,但 4.0.1 中引入的一项更改破坏了我的应用程序。

这是我看到的错误:

undefined method `[]' for nil:NilClass

activerecord (4.0.2) lib/active_record/attribute_methods/read.rb:86:in `block in read_attribute'
activerecord (4.0.2) lib/active_record/attribute_methods/read.rb:84:in `fetch'
activerecord (4.0.2) lib/active_record/attribute_methods/read.rb:84:in `read_attribute'
activerecord (4.0.2) lib/active_record/attribute_methods/read.rb:59:in `__temp__6696273747f5e616d656'
app/models/player.rb:20:in `short_name'

这是堆栈跟踪开始的我的应用程序代码:

# app/models/player.rb
def short_name
self.class.where(first_name: first_name).where('id != ?', id).exists? ? name : first_name
end

这是问题所在的差异(和 the commit on Rails):

diff -r activerecord-4.0.0/lib/active_record/attribute_methods/read.rb activerecord-4.0.1/lib/active_record/attribute_methods/read.rb

[snip]

80,86c85,92
< column = @columns_hash.fetch(name) {
< return @attributes.fetch(name) {
< if name == 'id' && self.class.primary_key != name
< read_attribute(self.class.primary_key)
< end
< }
< }
---
> column = @column_types_override[name] if @column_types_override
> column ||= @column_types[name]
>
> return @attributes.fetch(name) {
> if name == 'id' && self.class.primary_key != name
> read_attribute(self.class.primary_key)
> end
> } unless column

根据堆栈跟踪,@column_types 为 nil,我不明白为什么。

我没有从控制台遇到这个问题,只有当我在服务器上运行时,通过 rails s(开发环境)或 Unicorn 通过 foreman start(生产环境)。当我部署到 Heroku 上时,它也会失败。我也对这种方法进行了测试,它们都通过了。

有谁知道 @column_types 应该设置在哪里以及为什么在这种情况下它是 nil?

最佳答案

我也遇到了这个问题 - 您需要将 protected_attributes gem 更新到版本 1.0.5。

这里有更多信息:https://github.com/rails/rails/issues/13246


从 OP 编辑​​:您可能只需要刷新该线程中提到的缓存:

Rails.cache.clear

关于ruby-on-rails - column_types 在 Rails 4.0.1 中为 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20596842/

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