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

Jam*_*sir 0 ruby ruby-on-rails

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

attr_accessor :foo
attr_accessible :foo
Run Code Online (Sandbox Code Playgroud)

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

User.foo = "my attributre"
Run Code Online (Sandbox Code Playgroud)

我得到这个属性:

User.foo
Run Code Online (Sandbox Code Playgroud)

所以这些都无法识别并给我一个错误,即:

undefined method `foo=' for #<Class:0xb75366fc>
Run Code Online (Sandbox Code Playgroud)

所以请在这里帮忙.我正在使用铁路2.3.5

Dan*_*nne 5

attr_accessor不创建类方法,它创建实例方法.所以考虑到你的代码,它应该可以使用:

@user = User.new
@user.foo = "bar"
Run Code Online (Sandbox Code Playgroud)

编辑:

但是,如果您确实想要创建自定义方法,那么您可以执行以下操作:

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
Run Code Online (Sandbox Code Playgroud)

然后从控制器中调用它:

User.add_accessor "foo"
@user = User.new
@user.foo = "bar"
Run Code Online (Sandbox Code Playgroud)