0

我试图在我的模型中分配 ActiveRecord 属性的值,但无论出于何种原因,我都无法设置它们。

例如,我有一个 AccountModel,它有一个 Attributename

如果我从控制器或控制台(如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

4 回答 4

1

您的代码看起来不错,但您是否保存更改?尝试添加保存调用:

def set_name(new_name)
  self.name = new_name
  self.save
end
于 2013-08-01T10:38:56.833 回答
1

尝试:

def set_name(new_name)
  self.name = new_name
end

您需要使用self关键字来引用分配时的实例属性。否则,ruby 会将您的新名称分配给名为name.

您可能希望在save之后进行更改

user = User.new
user.set_name('foo')
user.save

看看这里的例子,最后有一个类似于你的问题;)

于 2013-08-01T10:38:59.270 回答
1

您不需要执行 self.save,只需在模型中调用 save 即可。只有在需要分配时才使用 self.attribute。

于 2013-08-01T12:17:28.047 回答
0

尝试

    def set_name(new_name)
      self.name = new_name
      self.save!
    end

然后简单地从控制器调用实例方法

user.set_name('foo')
于 2013-08-01T10:42:13.400 回答