保存在ActiveRecord中

时间:2009-10-17 17:11:07

标签: ruby-on-rails

使用模型时,何时需要明确保存?在setter中说

def name=(n) 
  self.name = n
end

我需要self.save吗?

3 个答案:

答案 0 :(得分:1)

保存会将更改保留到数据库中,如果要保留更改,则必须调用save。

在您给出的示例中,您不会在setter中调用save,您可以执行以下操作:

my_model.name = 'foo'
my_model.save

答案 1 :(得分:1)

对于您的具体示例,您需要执行以下操作:

class MyClass < ActiveRecord::Base
  def name=(n) 
    self.name = n
    save!
  end
end

我建议使用保存!除非您计划自保存以来检查错误,否则不要保存!将抛出异常,但保存将无声地失败。

顺便说一句,我猜你的例子只是一个快速不切实际的例子,因为你要覆盖“name”字段的现有ActiveRecord setter函数。 ActiveRecord访问器方法与纯Ruby访问器完全不同,因此如果在自动生成的“name =”方法之上创建“name =”,则会被搞砸。

答案 2 :(得分:0)

你不需要做任何事情。如果这对我来说最有效,你可以稍后保存。

如果您正在为记录做许多制定者,那么每次进行保存都没有意义。

model.foo1 = '1'
model.save

model.foo2 = '2'
model.save

model.foo3 = '3'
model.save

根据您的使用方式,您可以进行最终保存。只要你最终保存...