当前位置:  开发笔记 > 后端 > 正文

Rails:提交包含多个对象的表单

如何解决《Rails:提交包含多个对象的表单》经验,为你挑选了1个好方法。

我正在创建一个Rails应用程序,我遇到了一些障碍.我想要一个"为DataType1创建新记录"表单,不仅为DataType1创建一个新行,而且还为DataType2插入最多四个新行.

我知道所有关于fields_for的信息,但我的问题是我需要提交最多四个DataType2,它们与DataType1的唯一连接是它们是通过DataType2中的字段引用的.

这是简化的数据库:

create_table :data_type_1 do |t|
  t.string     :title
  t.text       :body

  t.timestamps
end

create_table :data_type_2 do |t|
  t.belongs_to :parent

  t.timestamps
end

现在,我建立了所有关系和一切; 那不是问题.问题是我似乎无法弄清楚如何使用新DataType1的参数传递DataType2s的参数.一旦有人告诉我应该怎么做,我可以设置新的DataType2s以便相当容易地与新的DataType1相关联.

这就是我目前对表格的看法:

<% form_for(@data_type_1) do |f| %>
  <%= f.error_messages %>

  

<%= f.label :title %>
<%= f.text_field :title %>

# Etc...

# New items need to be iterated here # DataType2[1]: [ ] # DataType2[2]: [ ] # DataType2[3]: [ ] # DataType2[4]: [ ] # (Note that these numbers are just examples.)

<%= f.submit "Create" %>

<% end %>

我对Rails比较陌生,如果这个问题有点吵,我会道歉.



1> Bill..:

这个 RailsCast谈到将"DataType2"列表插入"DataType1".有趣的部分是这些

app/views/projects/_form.html.erb

  <% for task in @project.tasks %>
    <% fields_for "project[task_attributes][]", task do |task_form| %>
      

Task: <%= task_form.text_field :name %>

<% end %> <% end %>

app/models/project.rb

def task_attributes=(task_attributes)
  task_attributes.each do |attributes|
    tasks.build(attributes)
  end
end


对于后来遇到这个问题的人来说,Rails添加了`accepts_nested_attributes_for`来为你处理模型代码.
推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有