我有一个用户模型=> @user
我想将新属性current_time
添加到@user
以供临时使用。
不想进行迁移以添加列(仅供临时使用):
@user.current_time = Time.now
有没有办法实现这个目标?
NoMethodError (undefined method `current_time=' for #<User:0x007fd6991e1050>):
app/controllers/carts_controller.rb:47:in `block in search_user'
app/controllers/carts_controller.rb:45:in `search_user'
答案 0 :(得分:5)
attr_accessor
将为实例变量设置读写器:
class Foo
attr_accessor :current_time
end
foo = Foo.new
foo.current_time = Time.now # Writes value
foo.current_time # Reads value
您可能也对attr_reader
和attr_writer
感兴趣。
答案 1 :(得分:0)
尝试在User.model中定义几个方法:
def current_time= (time)
@current_time = time
end
def current_time
@current_time
end
UPD 根据来自 kristinalim的正确评论
请注意,作为框架一部分的attr_accessible
在Rails 4中已弃用。现在使用强params。同时getter / setter attr_accessor
是核心Ruby的一部分并且照常工作。
此post
中详细解释了attr_accessible
和attr_accessor
之间的差异