2009-11-07 2 views
0

Comment faire cela avec ActiveRecord? Mon code:Définir automatiquement child.parent_id lorsque parent.children << enfant?

p = Product.create 
l = Label.create 
p.labels.add << l 

Mais je reçois l.parent == nil

create_table "labels", :force => true do |t| 
    t.integer "product_id" 
    end 
+0

Quelqu'un pourrait-il avec des pouvoirs mod s'il vous plaît modifier que pour « ActiveRecord »? Je me rends compte que cette question est une cause perdue dans son état actuel, mais peut-être qu'il peut être sauvé un peu? – jdl

+0

Votre volonté sera faite. –

Répondre

3

Une partie du code de votre part serait approprié, étant donné que ce que vous demandez devrait fonctionner automatiquement.

class Parent < ActiveRecord::Base 
    has_many :children 
end 

class Child < ActiveRecord::Base 
    belongs_to :parent 
end 

Si votre code ne ressemble pas à cela, postez une question plus précise.

Éditez: Est-ce que votre modèle Product a des validations dedans? Ils ne vont pas passer votre code ci-dessus, et vous ne vérifiez pas la valeur de retour de create, donc vous ne saurez jamais.

+0

Mon code est exactement comme ça. It's Rails 2.3.4 – Cheng

+0

Voir mes modifications ci-dessus à propos des validations. L'affichage de votre code de modèle serait utile, si ce n'est pas le cas. – jdl

+0

Je ne sais pas pourquoi. J'ai changé quelque chose et je les ai changés. Mais tout fonctionne maintenant. Je vous remercie. – Cheng

3

Vous pouvez utiliser acts_as_tree pour cela: http://github.com/rails/acts_as_tree

+0

Cela ne devrait-il pas être fait à un niveau inférieur? Quelle que soit l'arborescence ou la liste, child.parent_id doit être défini lorsqu'un parent l'inclut? – Cheng

Questions connexes