【问题标题】:Multiple children in single form in rails轨道中单一形式的多个孩子
【发布时间】:2011-02-06 14:24:35
【问题描述】:

我有一个具有任意数量子实体的模型。为简单起见,我们将实体称为 Orders 和 Items。我想要一个创建订单表单,在其中输入订单信息,并添加任意数量的项目。如果我点击“添加另一个项目”按钮,将添加一组新的表单元素来输入新的数据、金额等。

我可以用纯 javascript 破解它,但我很确定必须有一种更神奇、更古怪的方式来做到这一点,也许是部分视图或其他东西。我对rails有点太陌生了,不知道它是什么。

动态添加新表单元素,然后在创建控制器中访问它们的最佳方式是什么?

【问题讨论】:

  • @CaptnCraig,我更新了我的帖子以显示单层嵌套的示例。

标签: ruby-on-rails activerecord parent-child


【解决方案1】:

无法击败 Ryan Bates 提供的 Railscasts.com 教程。

Episode 196: Nested Model Form, pt. 1

这是一个仅适用于单层嵌套的示例

型号

models/company.rb

class Company < ActiveRecord::Base
  has_many :people, :dependent => :destroy
  accepts_nested_attributes_for :people, :allow_destroy => true
end

models/person.rb

class person < ActiveRecord::Base
  belongs_to :company
end

控制器

companies_controller.rb

def new
  @company = Company.new
  3.times { person = @company.people.build }
end

观看次数

views/companies/_form.html.erb

<% form_for @company do |f| %>
  <%= f.error_messages %>

  <p>
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </p>

  <%= f.fields_for :people do |builder| %> 
    <%= render "people_fields", :f => builder %>
  <% end %>

  <p><%= f.submit "Submit" %></p>
<% end %>

views/companies/_people_fields.html.erb

<p>
  <%= f.label :name, "Person" %>
  <%= f.text_field :name %>
  <%= f.check_box :_destroy %>
  <%= f.label :_destroy, "Remove" %>
</p>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-13
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    • 2012-08-17
    • 2011-10-07
    相关资源
    最近更新 更多