我需要一个可以抽象资源设置管理的gem。基本上我想要像
这样的东西@person = Person.find(1)
@person.settings <- this gives a hash of key/value pairs associated with this resource
我还需要一种方法来为每个人设置“默认”设置以及覆盖特定@person的设置。这些设置应该保存在SQL db中。
答案 0 :(得分:0)
这是一个旧的插件,但它非常全面,我在很多不同的项目中使用它:has_easy
对于Rails3,生成器不起作用,但您可以手动创建它需要的迁移。
class CreateHasEasyThings < ActiveRecord::Migration
def self.up
create_table :has_easy_things do |t|
t.string :model_type, :null => false
t.integer :model_id, :null => false
t.string :context
t.string :name, :null => false
t.string :value
t.timestamps
end
end
def self.down
drop_table :has_easy_things
end
end
它的工作方式基本上是你可以将你想要的任何模型与这个对象相关联,它会存储首选项,设置或者几乎任何可以被Rails序列化的东西。
您可以定义设置或模型上的内容:
class User < ActiveRecord::Base
has_easy :settings do |p|
p.define :language
p.define :theme
end
has_easy :flags do |f|
f.define :is_admin
f.define :is_spammer
end
end
动态创建一组访问设置和标志的方法。
u = User.new
u.settings.language = 'en/us'
u.flags.is_admin = true
答案 1 :(得分:0)
如果您有rails 2或rails 3,请查看Ledermann的rails-settings gem,其中的语法可以像您要求的那样获得所有键值对:
son.settings.all
轻松添加设置:
son.settings.key = value
您还可以根据设置获取活动记录范围以进行搜索。您可以设置默认设置和全局(应用程序范围)设置。
对于rails 2,您需要使用版本“〜&gt; 1.x”并按照文档:https://github.com/ledermann/rails-settings/blob/c5c34faf1bbe5742b58f6b3acff3874edc6e4bbc/README.md
如果您需要:在事件处理之前和之后:,请检查https://github.com/exceed/preferential/