store_accessor 未读取 JSON 字段中的值
store_accessor not reading value in JSON field
我有一个数据库 table:
create_table :events do |t|
t.string :event_type, null: false
t.json :data, default: {}
t.timestamps null: false
end
以及以下型号:
class Event < ApplicationRecord
store_accessor :data, :member_id
before_validation :populate_data
validates :member_id, presence: true
private
def populate_data
self.data[:member_id] = 123
end
end
尝试保存记录时,验证失败 member id - cannot be blank
。但是,如您所见,我在验证发生之前给 member_id
一个值。
我错过了什么吗?看来这对我有用。如果我手动强制创建一条记录,我可以调用 Event.last.member_id
并且它 returns 是正确的值,所以它显然 可以 从数据中读取值。
我跟你有过类似经历
我用字符串代替符号解决了。
你可以试试这个
def populate_data
self.data['member_id'] = 123
end
或者像这样使用访问器可能更好
def populate_data
self.member_id = 123
end
我有一个数据库 table:
create_table :events do |t|
t.string :event_type, null: false
t.json :data, default: {}
t.timestamps null: false
end
以及以下型号:
class Event < ApplicationRecord
store_accessor :data, :member_id
before_validation :populate_data
validates :member_id, presence: true
private
def populate_data
self.data[:member_id] = 123
end
end
尝试保存记录时,验证失败 member id - cannot be blank
。但是,如您所见,我在验证发生之前给 member_id
一个值。
我错过了什么吗?看来这对我有用。如果我手动强制创建一条记录,我可以调用 Event.last.member_id
并且它 returns 是正确的值,所以它显然 可以 从数据中读取值。
我跟你有过类似经历
我用字符串代替符号解决了。
你可以试试这个
def populate_data
self.data['member_id'] = 123
end
或者像这样使用访问器可能更好
def populate_data
self.member_id = 123
end