2010-01-07 48 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