我试图在我的模型中分配ActiveRecord属性的值,但无论出于何种原因,我都无法设置它们。
例如,我有一个AccountModel,它有一个属性name
如果我从控制器或控制台设置它(如user.name = "John"
),一切正常。
但是,如果我尝试在模型中设置它,比如
def set_name(new_name)
name = new_name
end
然后它不起作用。另一方面,检索名称,如
def get_name
name
end
工作得很好。我错过了什么吗?! 我使用Ruby 2.0.0-p247和Rails 4.0.0;请注意,这些示例不是真实世界的例子,我只是想让它们变得简单,以澄清我的问题。
祝你好运, 曼迪
答案 0 :(得分:1)
您的代码看起来很好,但是您保存更改吗?尝试添加保存呼叫:
def set_name(new_name)
self.name = new_name
self.save
end
答案 1 :(得分:1)
尝试:
def set_name(new_name)
self.name = new_name
end
您需要使用self
关键字在分配时引用您的实例属性。否则,ruby会将您的新名称分配给名为name
的本地变量。
您可能希望在
之后save
进行更改
user = User.new
user.set_name('foo')
user.save
看看示例here,最后有一个类似于你的问题;)
答案 2 :(得分:0)
尝试
def set_name(new_name)
self.name = new_name
self.save!
end
然后简单地从控制器调用实例方法
user.set_name('foo')
答案 3 :(得分:0)
您不需要执行self.save,只需在模型中调用save。您只需在分配时使用self.attribute。