2009-05-21 6 views
19

http://weblog.rubyonrails.org/2009/1/26/nested-model-formscomment gérer plusieurs modèles sous forme de rails

Ce poste a aidé à apprendre à gérer plusieurs modèles sous forme de rails. Cela fonctionne tant que les modèles sont imbriqués. Et s'ils ne le sont pas? disons, j'ai un formulaire, où l'utilisateur remplit les détails personnels, les coordonnées et un tas de cases à cocher spécifiant ses intérêts. Il y a au moins 3 tables impliquées dans ce formulaire unique, quelle est la meilleure façon de gérer cela, sans avoir 3 boutons de sauvegarde différents?

Répondre

25

Deux options:

premier est ActivePresenter qui fonctionne bien pour cela.

deuxième est juste à utiliser fields_for:

<%= form_for @user do |f| %> 

    <%=f.label :name %> 
    <%=f.text_field :name %> 

    <%= fields_for @address do |fa| %> 
     <%=fa.label :city %> 
     <%=fa.text_field :city %> 
    <% end %> 

<% end %> 

Ensuite, dans le contrôleur, sauvegarder les enregistrements.

@user = User.new(params[:user]) 
@address = Address.new(params[:address]) 

ActivePresenter fonctionne si bien.

Egalement trouvé un railsforum post via Google, qui fonctionnerait bien.

+0

Deuxième option semble très simple (je l'ai deviné) Je suis venu dans ce tutoriel, mais il est pour les modèles imbriqués bien que. Une question: et si j'avais plusieurs adresses? – user85748

+0

Je recommande vraiment d'éviter cela si vous le pouvez. Ce n'est pas très agréable à l'utilisateur du tout. Si vous devez simplement, alors jetez un oeil à ce premier: http://blog.new-bamboo.co.uk/2007/8/31/presenters-conductors-on-rails Vous pouvez également utiliser des tableaux de formulaires , mais ce n'est pas quelque chose que je peux expliquer dans un commentaire, et c'est abstrait. –

+0

en évitant d'ajouter plusieurs adresses que vous voulez dire? c'était juste un exemple, je ne vais pas le faire. mais il peut y avoir des cas où cela sera nécessaire. Par exemple, lorsque l'utilisateur entre dans ses centres d'intérêt (par exemple, je ne peux penser à rien de mieux), un par domaine de texte. – user85748

Questions connexes