是否有宝石来管理每个资源的设置?

时间:2011-08-01 17:15:34

标签: ruby-on-rails-3 settings gem

我需要一个可以抽象资源设置管理的gem。基本上我想要像

这样的东西
@person = Person.find(1)
@person.settings <- this gives a hash of key/value pairs associated with this resource

我还需要一种方法来为每个人设置“默认”设置以及覆盖特定@person的设置。这些设置应该保存在SQL db中。

2 个答案:

答案 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/