11
votes

Activerecord enregistre-t-il une association appartient_to lors de l'enregistrement de l'objet principal?

Si j'ai deux modèles: xxx

et xxx

si je fais: xxx

L'utilisateur est-ce que l'utilisateur est épargné et la touche principale correctement attribuée dans post 's user_id champ?


0 commentaires

3 Réponses :


21
votes

activeRecord appartences_to code> Les associations ont la possibilité d'être autosvées avec le modèle parent, mais la fonctionnalité est désactivée par défaut. Pour l'activer:

class Post < ActiveRecord::Base
  belongs_to :user, :autosave => true
end


6 commentaires

Bizarre. J'ai tourné ce drapeau, et fais la même chose que ci-dessus me donne toujours > post.Errors # => # ["ne peut pas être vide"]}> et < code> utilisateur.new_record? # => vrai . Est-ce que je manque quelque chose?


En fait, la fonctionnalité est sur par défaut. Vous devez la définir sur FALSE afin de l'éteindre, sinon toutes les associations seront sauvegardées automatiquement.


@ODEEODUM: Ce n'est pas vrai, j'ai eu un problème comme celui-ci et définir une autosave: true dans les rails 3 corrigé le problème.


@ Fire-Dragon-Dol, en réalité, il s'agit du comportement par défaut. Selon la documentation Autosavecord :: AutosaveeSSExSocation lorsque: L'option Autosave n'est pas présente, de nouvelles associations sont enregistrées.


MHHH, j'ai besoin de vérifier, parce que j'ai essayé sans elle et ça ne fonctionnait pas. Lorsque j'ai ajouté l'option d'autosave, cela a commencé à fonctionner bien et que je n'ai rien changé d'autre.


Du Docs ActiveCord: Notez que AutoSave: Faux n'est pas identique à ne pas déclarer: autosave. Lorsque l'option: autosave n'est pas présente, les nouveaux enregistrements d'association sont enregistrés, mais les enregistrements d'association mis à jour ne sont pas enregistrés.



8
votes

Je pense que vous voulez:

class User < ActiveRecord::Base
    has_many :posts, :autosave => true
end


0 commentaires

2
votes

the appartient à la documentation de l'API (Rails 4.2.1):

: autosave

Si true, enregistrez toujours l'objet associé ou détruisez-le s'il est marqué pour la destruction, lors de la sauvegarde de l'objet parent.

si faux, jamais enregistrez ou détruisez l'objet associé.

Par défaut, enregistrez uniquement le objet si c'est un nouvel enregistrement.

Notez que accepte_nedes_attributes_for Ensems: autosave à true.

Dans votre case de cas est un nouvel enregistrement, il sera donc automatiquement enregistré.

La dernière phrase sur accepte_netés_attributes_for est également manquée par beaucoup.


0 commentaires