自动保存模型的所有属性 - ActiveRecord

时间:2014-02-16 23:26:34

标签: ruby activerecord

问题的简短版本

我看到ActiveRecord有一个自动保存方法,用于在调用父模型的“保存”时保存关联模型。有没有办法自动保存整个模型?换句话说,我可以给模型一些声明,而不是“提交数据库步骤”吗?

现在我不得不说:

@household.address = "new address"
@household.save

但我宁愿说:

@household.address = "new address"

完成。

问题的更长版本

如果上述问题对您没有意义,请允许我给您一些背景信息!

在我的架构中,我有很多很多的东西。我喜欢每当我更新我的模型的一部分时,其余部分会自动保存。事实上,我甚至不必使用保存方法!

前:我有老师和学生一起参加课程。一门课程属于许多老师(是的,我的班级每班有很多老师)和许多学生。学生通过课程等教师。我发现如果我说

@course -= [@student]

@course += [@teacher]

然后我永远不需要使用@ course.save或更新或任何东西。它自救了。这是预期的行为!

现在提出我的问题。我的大多数协会都以这种方式工作(不需要保存),所以我觉得很烦人,在我的Schema的一部分中我需要使用save命令,但是为了其他一切而跳过该步骤。 (我想要一个更一致的框架工作,要么总是使用保存,要么永远不要使用它。)

你看,我的学生被分成了几个家庭(两个学生可以来自同一个家庭)。所以学生属于家庭,家庭有很多学生等。

如果我需要更改我家的地址,我必须使用

@household.address = "new address"
@household.save

所以我想要整个家庭模型的自动保存选项!我看到了关联的自动保存选项,但是在调用save时我不需要任何级联保存,我只是简单地不想被打电话保存!

1 个答案:

答案 0 :(得分:2)

我从未见过你想在Rails中实现的这个功能,我很确定它不存在。否则,假设您必须设置模型的多个属性,每次更改属性时都将执行一条sql指令。

如果你想添加这种功能,你可以实现它覆盖地址设置器,以便在设置后保存模型。

def address=(value)
  @address = value
  self.save
end

我会建议你一个更好的选择,只需使用这个单行语法来设置和保存对象

@household.update_attributes(:address => "new address")