2009-12-21 6 views
1

J'utilise actuellement l'attribution de masse de modèle imbriqué sur l'un de mes modèles. Cela fonctionne, mais j'aimerais pouvoir m'assurer que tous les modèles imbriqués créés appartiennent au même utilisateur.Attributs de substitution pour l'attribution d'une masse de modèle imbriquée

J'ai réussi à mettre en œuvre ce en utilisant la méthode d'alias enchaînant avec:

def contact_attributes_with_user_id=(attributes) 
    self.contact_attributes_without_user_id = attributes.merge("user_id" => user_id) 
    end 
    alias_method_chain :contact_attributes=, :user_id 

Maintenant, cela fonctionne très bien, mais cela signifie que je ne peux plus avoir attribuer une protection sur user_id pour le contact - qui pourrait facilement prendre quelqu'un dans le futur.

Quelqu'un peut-il trouver un meilleur moyen?

Répondre

0

si vous ajoutez un before_save crochet à votre Contact modèle, comme ceci:

belongs_to :parent 
validates_presence_of :parent_id 

before_save :assign_user_id 

private 
def assign_user_id 
    self.user_id = parent.user_id 
end 

De cette façon, vos contacts les user_ids suivront l'ont du modèle parent et vous ne pas à vous soucier l'attribution du tout (vous pouvez vous débarrasser du alias_method_chain).

+0

Excellente idée. Une légère difficulté que je peux voir (et non reflétée dans la question originale) est mes contacts have_many: foos, plutôt que has_one -> appartiennent à. Bien que je puisse facilement l'obtenir par défaut à la valeur du premier foos user_id. – Theozaurus

Questions connexes