我正在将代码从Rails 3迁移到Rails 5.1.6和Ruby 2.5。我面临着奇怪的问题。我在模型中编写了after_initialize
回调并将默认值分配给字段。该字段为serialize
,当该字段中有nil
时,它将在回调中分配默认值。
这是我的清晰图片代码
class MyModel < ActiveRecord::Base
serialize :settings
after_initialize :set_default_setting
def set_default_setting
self.settings = self.settings || {my_fields: ["a", "b", "c"]}
end
end
这是我的Rails控制台日志:
[1] 2.5.0 :135 > md = MyModel.find(1)
=> #<MyModel:0x00007fe433608348
id: 1,
settings: <ActionController::Parameters permitted: >,
created_at: Tue, 16 Jan 2018 08:45:26 GMT +00:00,
updated_at: Fri, 04 May 2018 10:50:20 BST +01:00>
[2] 2.5.0 :136 > md.settings
=> <ActionController::Parameters permitted: >
[3] 2.5.0 :137 > md.settings.nil?
=> false
我的问题是为什么将<ActionController::Parameters permitted: >
添加到nil字段中?当我执行nil?
方法时,它应该返回我nil
。上面的代码可以在Rails 3.2和Ruby 2.0上正常工作,我将从中升级到Rails 5和Ruby 2.5
任何帮助将不胜感激。
先谢谢您