在Rails中使用组合

时间:2011-10-09 06:48:55

标签: html ruby-on-rails-3 activerecord erb html-form

我不知道哪种方法最好或最正确,所以我正在寻找建议。

阶段: 我正在使用Rails 3制作一些网络应用程序。 对两个模型进行成像:CanvasZonecanvas对象意图成为一个正方形,其中将有四个zone(北,南,东和西)。 每个zone都有以下属性:text:stringrgb_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 %>

但我应该如何处理四个区域?

1 个答案:

答案 0 :(得分:2)

您可以使用accepts_nested_attributes_forfields_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 %>

有关详细信息和解释,请查看: