将属性附加到模型以便在Rails 3上临时使用

时间:2013-10-23 09:29:33

标签: ruby-on-rails ruby

我有一个用户模型=> @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'

2 个答案:

答案 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_readerattr_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_accessibleattr_accessor之间的差异