2010-09-16 7 views
7

J'essaye de créer un formulaire imbriqué en utilisant formtastic. J'ai inclus mon code ci-dessous, mais je rencontre des problèmes que j'ai également énumérés ci-dessous. Aucune suggestion? Merci.Utilisation de semantic_fields_for de Formtastic avec une association has_many

# Home model 
class Home < ActiveRecord::Base 
    has_many :home_members 
    accepts_nested_attributes_for :home_members, :reject_if => :all_blank, :update_only => true, :allow_destroy => true 
end 


# Form builder in members/new.html.erb 
<%= semantic_form_for @home, :url => home_members_path(@home), :html => { :method => :post }, :remote => true do |f| %> 
    <%= f.inputs do %> 
    <%= f.semantic_fields_for :home_members do |h| %> 
    <%= h.input :name %> 
    <%= h.input :email %> 
    <%= h.input :birthday, :as => :string %> 
    <% end %> 
<% end %> 

# members_controller's new method; @home is set in a before filter 
def new 
    2.times{ @home.home_members.build } 
end 
  1. Un utilisateur par défaut est créé quand une maison est enregistrée. Comment faire pour que le formulaire affiche uniquement les enregistrements nouvellement créés et non ceux existants?

  2. Si le numéro 1 n'est pas possible, comment effectuer la mise à jour d'enregistrement existante? J'ai mis update_only sur accept_nested_attributes_for, mais un nouvel enregistrement est toujours créé.

  3. Je fais 2.times {@ home.home_members.build} dans l'action du contrôleur. Lorsque j'imprime la taille de @ home.home_members, j'obtiens 3 (un existe déjà) comme prévu. Pourquoi le formulaire affiche-t-il uniquement deux ensembles d'entrées, l'un étant rempli avec les données home_member existantes?

+1

Avez-vous encore besoin de réponses à cette question? Si vous avez trouvé une solution, pourriez-vous poster la réponse vous-même? –

Répondre

4

bien répondre à la question 1) montrent que les objets nouvellement créés

# Form builder in members/new.html.erb 
<%= semantic_form_for @home, :url => home_members_path(@home), :html => { :method => :post }, :remote => true do |f| %> 
    <%= f.inputs do %> 
    <%= f.semantic_fields_for :home_members do |h| %> 
    <% if h.object.new_record? %> 
     <%= h.input :name %> 
     <%= h.input :email %> 
     <%= h.input :birthday, :as => :string %> 
    <% end %> 
    <% end %> 
<% end %> 
Questions connexes