【发布时间】:2012-04-10 02:07:12
【问题描述】:
来自架构的设置表:
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)>'
...
【问题讨论】:
标签: ruby-on-rails ruby metaprogramming