我将“:foo”属性添加到我的用户模型中:
attr_accessor :foo
attr_accessible :foo
但是当我从会话控制器或任何其他控制器设置此属性时:
User.foo = "my attributre"
我将此属性命名为:
User.foo
因此无法识别并给我一个错误,即:
undefined method `foo=' for #<Class:0xb75366fc>
所以请在这里帮忙。 我正在使用RAILS 2.3.5
答案 0 :(得分:5)
attr_accessor
不创建类方法,它创建实例方法。因此,鉴于您的代码,它应该可以使用:
@user = User.new
@user.foo = "bar"
但是,如果您确实想要创建自定义方法,那么您可以执行以下操作:
class User < ActiveRecord::Base
def self.add_accessor(attr)
define_method(attr) do
instance_variable_get("@#{attr}")
end
define_method("#{attr}=") do |val|
instance_variable_set("@#{attr}",val)
end
end
然后你从你的控制器中调用它:
User.add_accessor "foo"
@user = User.new
@user.foo = "bar"
答案 1 :(得分:3)
如果要在类级别拥有属性访问者,请尝试此操作 在用户模型中,使用此代码
class << self
attr_accessor :foo
end