2010-07-20 7 views
0

Mes données ressemble à ceci:d'une association désordonner has_many avec référence belongs_to dans le has_many

class Team < ActiveRecord::Base 
    has_many :persons 
belongs_to :leader, :class_name => "Person" 
end 

class Person < ActiveRecord::Base 
    belongs_to :team 
end 

Je crée l'équipe comme ceci:

@team = Team.new 

    for (each new person as p) 

    new_person = @team.persons.build 
    new_person.name = p.name 

    if p.is_marked_as_leader 
     @team.leader = new_person 
    end 
    end 

    @team.save 

Lorsque je liste @ team.persons, @team .leader a le premier id, je suppose que @ team.save est en train de sauver l'association leader avant les personnes. J'ai besoin qu'ils soient dans l'ordre où ils sont fournis, où le: leader fait référence à l'un des ID de mon has_many: personnes

Merci!

Répondre

0

Vous ne devez pas compter sur les ID pour être dans un ordre particulier, il y a beaucoup de choses qui peuvent arriver. Vous pouvez affecter une autre colonne DB pour représenter la commande en quelque sorte.

Si vous voulez le faire bien, il suffit de sauvegarder les personnes que vous les créez, puisque c'est lorsque les ID seront-ils assignés:

new_person = @team.persons.build 
new_person.name = p.name 
new_person.save 

Si vous êtes inquiet au sujet de la cohérence de la base de données, Envelopper les for boucle et le @team.save dans une transaction, de sorte qu'ils sont tous annulés si l'un échoue.

Questions connexes