1

移动版本:0.4.2 / Rails 版本:5.2.0.rc1

在使用 Mobility 的 Rails 应用程序中,我的模型结构如下所示:

create_table :settings do |t|
  t.string :type
  t.jsonb :values, null: false, default: {}
  t.timestamps
end

add_index  :site_settings, :values, using: :gin

我的模型看起来像这样:

class Setting < ApplicationRecord
  extend Mobility
  translates :values
end

在值列中,我保存了多个值设置,例如:

Setting.create(values: { setting_1: 'test', setting_2: 'test2' })

在此之前,Mobility 正在按预期工作,并将哈希保存在正确的语言环境中。

但现在我想为其他开发人员提供方便的方法来写入和读取值,例如:

ss = Setting.new
ss.setting_1 = 'test'
ss.setting_2 = 'test2'
ss.save

和阅读方法:

Setting.last.setting_1 => 'test'

我已经尝试过使用store_accessor自定义访问器,甚至使用自定义访问器,但我无法使用store_accessor或其他自定义方法正常工作。

有什么帮助吗?


移动配置:

Mobility.configure do |config|
  config.default_backend = :jsonb
  config.accessor_method = :translates
  config.query_method = :i18n
end
4

1 回答 1

0
class Setting < ApplicationRecord
  extend Mobility
  translates :values, presence: false, default: {}

  def setting_1
    values["setting_1"]
  end

  def setting_1=(value)
    values["setting_1"] = value
  end

  def setting_2
    values["setting_2"]
  end

  def setting_2=(value)
    values["setting_2"] = value
  end

  # etc...
end

我禁用了存在插件,否则会将空哈希转换为nil,并将默认值设置{}为避免零键错误。

让肮脏的跟踪工作我留给读者作为练习;)

于 2018-02-16T12:33:02.530 回答