开发者

How to store different site parameters in database with Rails?

开发者 https://www.devze.com 2022-12-18 05:53 出处:网络
There are a lot of ways to store site preferences in database. But what if I need to manage datatypes. So some preferences will be boolean, others strings, others integers.

There are a lot of ways to store site preferences in database. But what if I need to manage datatypes. So some preferences will be boolean, others strings, others integers.

开发者_StackOverflow中文版

How can I organize such store?


I wrote a gem that does exactly this, and recently updated it for Rails 3:

For Rails 3:

http://github.com/paulca/configurable_engine

For Rails 2.3.x

http://github.com/paulca/behavior

Enjoy!


I am quite lazy with preferences and store the data as serialized JSON or YAML Hashes. Works really well, and generally preserves the data types as well.


I used a single table with a single row, and each column representing one preference. This makes it possible to have different datatypes.

To be able to retrieve a preference, I overrode method_missing to be able to retrieve the preference value directly from the class name without requiring an instance, something like this:

class Setting < ActiveRecord::Base
  @@instance = self.first

  def self.instance
    @@instance
  end

  def self.method_missing(method, *args)
    option = method.to_s
    if option.include? '='
        var_name = option.gsub('=', '')
        value = args.first
        @@instance[var_name] = value
      else
        @@instance[option]
    end
  end
end

Thus, to retrive a setting, you would use:

a_setting = Setting.column_name


Rails Migrations are used to create and update the database.

http://guides.rubyonrails.org/migrations.html

0

精彩评论

暂无评论...
验证码 换一张
取 消