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