无法在Model中分配ActiveRecord属性

时间:2013-08-01 10:33:24

标签: ruby-on-rails ruby activerecord ruby-on-rails-4

我试图在我的模型中分配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;请注意,这些示例不是真实世界的例子,我只是想让它们变得简单,以澄清我的问题。

祝你好运, 曼迪

4 个答案:

答案 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。