2010-06-13 3 views
5

Alors, voici le scénario:champs de formulaire modèle imbriqués Formtastic (Rails 3)

utilisateur:

has_one :company 
accepts_nested_attributes_for :company 

Controller:

@user = User.new 
@user.build_company 

Vue:

<% semantic_form_for @user, :url => register_path do |form| %> 

    <h2>User Information</h2> 

    <%= form.inputs %> 

    <h2>Company Information</h2> 

    <% form.semantic_fields_for :company do |company| %> 
    <%= company.inputs %> 
    <% end %> 

    <%= form.buttons %> 

<% end %> 

Après avoir écumé le web, ce SEEMS comme ça devrait fonctionner. Cependant, tout ce que je reçois sont les entrées de l'utilisateur. Le bloc "semantic_fields_for: company" ne renvoie rien du tout ...

Ai-je raté quelque chose ici, ou est-ce que c'est peut-être un bug de Rails 3 à faire avec Formtastic?

Répondre

4

Vous devez utiliser "<% =%>" avec Rails 3 blocs au lieu de "<%%>". Ainsi, le code doit être:

<%= semantic_form_for @user, :url => register_path do |form| %> 

    <h2>User Information</h2> 

    <%= form.inputs %> 

    <h2>Company Information</h2> 

    <%= form.semantic_fields_for :company do |company| %> 
    <%= company.inputs %> 
    <% end %> 

    <%= form.buttons %> 

<% end %> 
+0

manquant un caractère .. Je dois l'aimer: P – elsurudo

+0

Wow, merci beaucoup! J'ai passé plus d'une heure à chercher ça. – Alex

2

comme pour la nouvelle syntaxe rails3, dans votre contrôleur vous devez utiliser

@user.company.build

au lieu de

@user.build_company

+0

En fait, cela ne fonctionne pas. Vous obtenez une référence nulle ... – elsurudo

+0

testé sur rails3 beta4. cela fonctionne, ceci est un exemple tiré d'un contrôleur je l'ai écrit: def nouvelles @realty = Realty.new @ realty.ownerships.build (: person_id => params [: person_id]) respond_to do | Format | format.html # new.html.erb fin fin les méthodes build_ * ont été supprimées à coup sûr. –

+1

Cela fonctionne pour vous parce que votre @realty a beaucoup de propriétaires. Quand il a has_one (comme dans le cas de l'OP), vous devez utiliser @ realty.build_ownership –

Questions connexes