3

スキーマからの設定テーブル:

create_table "settings", :force => true do |t|
  t.string   "name"
  t.string   "value"
  t.datetime "created_at"
  t.datetime "updated_at"
end

設定テーブルには次のレコードがあります。

{name: "notification_email", value: "hello@monkey.com"}
{name: "support_phone", value: "1234567"}

Setting.notification_email関数が「hello@monkey.com」を返し、Setting.support_phone関数が「 1234566 」を返すようにします

これが私のsetting.rbにあるものです:

class Setting < ActiveRecord::Base
  class << self
    all.each do |setting|
      define_method "#{setting.name}".to_sym do
        setting.value.to_s
      end 
    end 
  end 
end

しかし、コンソールに Setting.notification_email を入力すると、次のエラーが表示されます。

NameError: undefined local variable or method `all' for #<Class:0x000000053b3df0>
    from /home/adam/Volumes/derby/app/models/setting.rb:7:in `singletonclass'
    from /home/adam/Volumes/derby/app/models/setting.rb:2:in `<class:Setting>'
    from /home/adam/Volumes/derby/app/models/setting.rb:1:in `<top (required)>'
    ...
4

1 に答える 1

3

define_singleton_method を使用します。

class Setting < ActiveRecord::Base

  self.all.each do |instance|
    define_singleton_method(instance.name) do
      instance.value.to_s
    end
  end
end
于 2012-04-10T02:12:05.427 に答える