2010-01-07 50 views
0

引用問題#2013421,我有以下的回報率模型:Ruby on Rails:如何從表單中收集子表的值?

class Game < ActiveRecord::Base 
    has_many :piles 
end 

class Pile < ActiveRecord::Base 
    belongs_to :game 
end 

爲了討論的方便,假設Game有一個屬性name,並Pile有一個屬性type,既string。每場比賽只有10支。

我想單個HTML表單創建一個新的遊戲,類似於ruby script\generate scaffold生成的遊戲;這是這樣的:

<h1>New game</h1> 

<% form_for(@game) do |f| %> 
    <%= f.error_messages %> 

    <p> 
    <%= f.label :name %><br /> 
    <%= f.text_field :name %> 
    </p> 
    <p> 
    <%= f.submit 'Create' %> 
    </p> 
<% end %> 

<%= link_to 'Back', games_path %> 

我如何添加字段的形式,以閱讀爲Pile.type字段值各10樁?

回答

3

你可以做這樣的事情:

型號:

class Game < ActiveRecord::Base 
    has_many :piles 
    accepts_nested_attributes_for :piles 
end 

在您的形式:

<% f.fields_for :piles do |pile_form| %> 

    <%= pile_form.label :your_attribute %> 
    <%= pile_form.text_field :your_attribute %> 

<% end %> 

考慮到 '類型' 的方法 - 關鍵字列由ActiveRecord的保留實現多態關聯

查看good guide about nested forms in rails

+0

我從指南中看到,accep_nested_attributes_for是一個Rails 2.3功能。可悲的是,我的網絡服務器使用apt-get軟件包在Debian上運行,所以只能使用Rails 2.2。 然而,玩弄我設法使f.fields_for咒語工作爲我提供了一個可解釋的散列,這就是我所需要的。 – Chowlett 2010-01-07 15:40:29

+0

如果apt-get包落後,請安裝gem,使用apt-get同樣簡單。 – EmFi 2010-01-07 20:08:22

+0

我不擁有我的網絡服務器,我的系統管理員是一個敏感的偏執狂。雖然我很樂意安裝寶石,但我尊重他的不喜歡。 – Chowlett 2010-01-08 08:46:00