【问题标题】:Autosave all attributes of model - ActiveRecord自动保存模型的所有属性 - ActiveRecord
【发布时间】:2014-02-16 23:26:34
【问题描述】:

问题的简短版本

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

现在我不得不说:

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

但我更想说:

@household.address = "new address"

然后完成。

加长版问题

如果上面的问题对你没有意义,让我给你一些背景信息!

在我的 Schema 中,我有很多很多的 has_many through。我喜欢每当我更新我的模型的一部分时,其余部分都会自动保存。其实我什至不必使用 save 方法!

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

@course -= [@student]

@course += [@teacher]

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

现在回答我的问题。我的大多数关联都以这种方式工作(不需要保存),所以我发现在我的一个架构中我需要使用保存命令,但对于其他所有事情都跳过该步骤,这很烦人。 (我想要一个更一致的框架,要么总是使用 save 要么从不使用它。)

你看,我的学生被分组到家庭中(两个学生可以来自同一个家庭)。所以学生属于家庭,家庭有_许多学生等等。

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

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

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

【问题讨论】:

    标签: ruby activerecord


    【解决方案1】:

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

    如果您想添加这种功能,您可以覆盖您的地址设置器以在设置后保存模型。

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

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

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

    【讨论】:

      猜你喜欢
      • 2019-03-21
      • 1970-01-01
      • 2013-07-11
      • 1970-01-01
      • 1970-01-01
      • 2013-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多