2010-01-07 3 views
0

question # 2013421 Référencer, j'ai les modèles suivants: RoRRuby on Rails: Comment collecter des valeurs pour les tables enfant à partir d'un formulaire?

class Game < ActiveRecord::Base 
    has_many :piles 
end 

class Pile < ActiveRecord::Base 
    belongs_to :game 
end 

Pour les besoins du raisonnement, supposons que Game a un attribut name et Pile a un attribut type, à la fois string. Il y a précisément 10 piles par jeu.

Je voudrais un formulaire HTML unique pour créer un nouveau jeu, similaire à celui généré par ruby script\generate scaffold; qui est comme:

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

Comment puis-je ajouter des champs à la forme afin de lire les valeurs du champ Pile.type pour chacun des 10 piles?

Répondre

3

Vous pouvez faire quelque chose comme ceci:

modèle

:

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

dans votre formulaire:

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

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

<% end %> 

Tenir compte de cette méthode-colonnes de mot-clé 'type' est réservé par ActiveRecord à réaliser des associations polymorphes

voir un good guide about nested forms in rails

+0

Je vois dans le guide que accept_nested_attributes_for est une fonctionnalité de Rails 2.3. Malheureusement, mon serveur web tourne sur Debian en utilisant les paquets apt-get, et ce n'est que jusqu'à Rails 2.2. Cependant, en jouant, j'ai réussi à faire fonctionner le f.fields_for incantation pour me fournir un hachage interprétable, ce qui est tout ce dont j'ai besoin. – Chowlett

+0

Si les paquets apt-get sont derrière, installez la gemme, c'est aussi simple que d'utiliser apt-get. – EmFi

+0

Je ne possède pas mon serveur web et mon administrateur est un niveau raisonnable de paranoïaque. Bien que je serais heureux d'installer la gemme, je respecte sa préférence de ne pas. – Chowlett

Questions connexes