2010-10-26 32 views
0

J'ai un emboîtées qui instancie comme ceci:L'instanciation correcte d'un champs imbriqué sans afficher les anciens objets enregistrés?

- 2.times { @organization.referrals.build } 
- form_for @organization do |f| 
    = f.error_messages 
    - f.fields_for :referrals do |f| 

Sauf, les formes imbriquées sont censées être toujours nouvelle et unique. Où comme ce formulaire montre aussi les objets créés précédemment.

J'ai donc essayé d'écrire comme si ..

- 2.times { @organization.referrals.build } 
- form_for @organization do |f| 
    = f.error_messages 
    - f.fields_for @organization.referrals.select{|r| r.new_record? } do |f| 

Mais maintenant, je ne vois pas 2 formulaires vierges, et je ne peux pas sauver mon objet, car il essaie de passer Organization.referral (ce qui est une méthode) au lieu de Organization.referrals.

Question 1

Comment puis-je créer 2 formulaires vierges?

Question 2

Comment puis-je obtenir cela passe correctement (comme dans le premier exemple)?

Répondre

1

Essayez ceci:

modèle

class Organization < ActiveRecord::Base 
    has_many :referrals 
    accepts_nested_attributes_for :referrals 
end 

vue

<%= form_for @organization do |f| %> 
    <% 2.times do |i| %> 
    <%= f.fields_for :referrals, @organization.referrals.build, :index => i do |rf| %> 
     <%= rf.text_field :some_referral_attribute %> 
    <% end %> 
    <% end %> 
<% end %> 
+0

Désolé j'ai marqué votre réponse la pensée correcte, il était théoriquement exact, mais en réalité, aucun champ se produit quand je lance ce . – Trip

+0

Si vous pouvez publier votre sortie et le code actuel (pas le pseudo code) qui serait extrêmement utile pour obtenir une réponse précise, puisque ce que j'ai collé est techniquement correct, mais vous devrez peut-être modifier quelque chose en fonction de votre configuration. – jenjenut233