Нарушение связи has_many с ссылкой принадлежащей в has_many - PullRequest
0 голосов
/ 21 июля 2010

Мои данные похожи на это:

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

class Person < ActiveRecord::Base
  belongs_to :team
end

Я создаю команду так:

  @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

Когда я перечисляю @ team.persons, @ team.leader имеет первый идентификатор, я думаю, потому что @ team.save сохраняет ассоциацию лидеров перед людьми. Мне нужно, чтобы они были в том порядке, в котором они были предоставлены, где: leader owner_to ссылается на один из идентификаторов в моем has_many: people

Спасибо!

1 Ответ

0 голосов
/ 21 июля 2010

Вы не должны полагаться на идентификаторы в любом конкретном порядке, есть много вещей, которые могут произойти. Вы можете назначить другой столбец БД для представления порядка.

Если вы хотите сделать это, просто сохраните людей по мере их создания, поскольку именно тогда идентификаторы будут назначены:

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

Если вас беспокоит согласованность базы данных, оберните цикл for и @team.save в транзакции, чтобы все они откатывались в случае сбоя одного из них.

...