移动版本: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
答案 0 :(得分: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
,并将默认值设置为{}
以避免出现空键错误。
让脏跟踪工作我作为练习留给读者;)