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
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)
| 归档时间: |
|
| 查看次数: |
660 次 |
| 最近记录: |