58 votes

Includes_nested_attributes_for travaille-t-il avec?

Je reçois toutes sortes d'informations contradictoires sur cette question fondamentale, et la réponse est assez cruciale pour mes problèmes actuels. Donc, très simplement, dans Rails 3, est-il permis ou non d'utiliser accept_nested_attributes_for avec une relation d'appartenance?

 class User < ActiveRecord::Base
  belongs_to :organization
  accepts_nested_attributes_for :organization
end

class Organization < ActiveRecord::Base
  has_many :users
end
 

Dans une vue:

 = form_for @user do |f|
  f.label :name, "Name"
  f.input :name

  = f.fields_for :organization do |o|
    o.label :city, "City"
    o.input :city

  f.submit "Submit"
 

22voto

kid_drew Points 404

Les attributs imbriqués semblent bien fonctionner pour une association d’appartements_à partir de Rails 4. Cela a peut-être été modifié dans une version antérieure de Rails, mais j’ai testé dans la version 4.0.4 et il fonctionne vraiment comme prévu.

21voto

robmclarty Points 656

Le doc epochwolf cité unis dans la première ligne de "Nested attributs vous permettent d'enregistrer des attributs sur les enregistrements associés à travers le parent." (mon emphase).

Vous pourriez être intéressé par cet autre DONC, la question qui est dans le même sens que celui. Il décrit deux solutions possibles: 1) le déplacement de la accepts_nested_attributes de l'autre côté de la relation (dans ce cas, l'Organisation), ou 2) à l'aide de l' build méthode pour construire l'Organisation de l'Utilisateur avant le rendu de la forme.

J'ai aussi trouvé un résumé qui décrit une solution potentielle pour l'utilisation de accepts_nested_attributes avec un belongs_to relation si vous êtes prêt à traiter avec un peu de code supplémentaire. Il utilise l' build méthode.

10voto

user3551164 Points 11

Pour l'association belongs_to dans Rails 3.2, le modèle imbriqué nécessite les deux étapes suivantes:

(1) Ajoutez de nouveaux attr_accessible à votre modèle d’utilisateur.

 attr_accessible :organization_attributes
 

(2) Et ajoutez @user.build_organization à votre contrôleur utilisateur afin de créer organization .

 def new
  @user = User.new
  @user.build_organization
end
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X