我不知道哪种方法最好或最正确,所以我正在寻找建议。
阶段:
我正在使用Rails 3制作一些网络应用程序。
对两个模型进行成像:Canvas
和Zone
。
canvas
对象意图成为一个正方形,其中将有四个zone
(北,南,东和西)。
每个zone
都有以下属性:text:string
和rgb_color:string
。
我想渲染一个HTML表单,其中用户必须捕获Canvas注册表,换句话说,在此表单中将有四组区域字段。
问题: 如何在一个HTML表单中捕获所有这些?
如果我只有一个区域,我可以这样做:
<%= form_for(@zone) do |f| %>
<div class="field">
<%= f.label :text %><br />
<%= f.text_field :text %>
</div>
<div class="field">
<%= f.label :rgb_color %><br />
<%= f.text_field :rgb_color %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
但我应该如何处理四个区域?
答案 0 :(得分:2)
您可以使用accepts_nested_attributes_for
和fields_for
执行此操作:
型号:
class Canvas < ActiveRecord::Base
has_many :zones
accepts_nested_attributes_for :zones
end
控制器:
class CanvasesController < ApplicationController
def new
@canvas = Canvas.new
4.times { @canvas.zones.build }
end
end
查看:
<%= form_for(@canvas) do |f| %>
<%= f.fields_for :zones do |zone| %>
<div class="field">
<%= zone.label :text %><br />
<%= zone.text_field :text %>
</div>
<div class="field">
<%= zone.label :rgb_color %><br />
<%= zone.text_field :rgb_color %>
</div>
<% end %>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
有关详细信息和解释,请查看: