在一次提交中更新多条记录? - 导轨 3

Posted

技术标签:

【中文标题】在一次提交中更新多条记录? - 导轨 3【英文标题】:Updating multiple records in a single submit? - Rails 3 【发布时间】:2011-11-23 10:16:31 【问题描述】:

我是 Rails 新手,遇到了一些困难......

我有一个页面显示表格中的记录列表,并希望用户能够进行更改、提交表单、运行验证和保存数据。

这是我目前所拥有的:

查看:

- @people.each do |p|
  %tr
    %td
      %input:type => "hidden", :name => "person_id[]", :value => p.id
      %input:name => "firstname[]", :value => p.firstname
    %td
      %input:name => "lastname[]", :value => p.lastname

发布到控制器的示例参数:

"person_id"=>["12", "13", "14"], 
"firstname"=>["john", "joe", "mary"], 
"lastname"=>["smith", "bloggs", "jane"],

此时我很害怕,因为我不再绑定到活动记录。相反,我觉得自己想编写一些乱七八糟的代码来循环 person_id 数组以查看发生了什么变化并将任何更改写回。

这感觉很糟糕,因为我必须明确比较每个字段,而且如果在中途由于验证错误而失败,我应该如何回滚任何更改并将消息显示给用户?

我希望由于我对 rails 的无知,这整个方法都是错误的,我错过了一个技巧。有人对如何解决这个问题有任何建议吗?

【问题讨论】:

看看***.com/q/5583568/800526的答案——更具体地说是railscasts.com/episodes/… 【参考方案1】:

我想通过查看视图代码中隐藏的person_id 字段,您在people modelperson model 之间建立了一个关联。 如果您的关联设置正确,请使用

accepts_nested_attributes_for

并关注Rails guides for association basics。 目前,我只能为您提供这么多帮助,因为您的问题中没有提供太多信息。

【讨论】:

谢谢,一直在尝试这种方法,但根据文档更新仅适用于 1:1 关系。 "允许您指定仅可以更新现有记录。只有在没有现有记录时才可以创建新记录。此选项仅适用于一对一关联,对于集合关联将被忽略。此选项已关闭默认情况下。” :api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/…

以上是关于在一次提交中更新多条记录? - 导轨 3的主要内容,如果未能解决你的问题,请参考以下文章

SQL如何一次性添加多条记录

使用JDBC一次插入多条记录(以MySQL为例)

使用 sequelize 和 nodejs 更新多条记录?

ios:使用核心数据同时保存/更新多条记录

如果 mysql 数据库中的表中不存在,则更新或插入多条记录

如何在oracle数据表中一次性插入多条记录?