Используйте композицию в Rails - PullRequest
2 голосов
/ 09 октября 2011

Я не знаю, что является лучшим или правильным способом сделать что-то, поэтому я ищу предложения.

Этап : я использую Rails 3, чтобы создать какую-то сетьприложение.Imaging две модели: 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 %>

Но как мне сделать это с четырьмя зонами?

1 Ответ

2 голосов
/ 09 октября 2011

Вы можете сделать это с 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 %>

Для более подробной информации и объяснения взгляните на это:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...