2011-10-09 20 views
2

我不知道哪個是最好的或正確的方式來製作東西,所以我在尋找建議。在Rails中使用組合

階段: 我正在使用Rails 3製作一些Web應用程序。 成像兩種型號:CanvasZone。 A canvas對象意圖是一個廣場,其中將有四個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 %> 

但是我應該如何與四個區做呢?

回答

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 %> 

對於更多的細節和解釋來看看這個:

+0

非常感謝您的答覆! 我會測試它。 – Israel

+0

它工程出色! – Israel

+0

還有一個問題... 有沒有辦法讓交易保證保存所有模型?必須保存/更新Canvas及其四個區域,如果其中一個失敗,則全部必須回滾。 – Israel