如何将用户定义的属性添加到模型中

时间:2010-12-09 09:19:38

标签: ruby-on-rails ruby

我将“:foo”属性添加到我的用户模型中:

attr_accessor :foo
attr_accessible :foo

但是当我从会话控制器或任何其他控制器设置此属性时:

User.foo = "my attributre"

我将此属性命名为:

User.foo

因此无法识别并给我一个错误,即:

undefined method `foo=' for #<Class:0xb75366fc>

所以请在这里帮忙。 我正在使用RAILS 2.3.5

2 个答案:

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

进一步参考http://apidock.com/rails/Class/cattr_accessor