Монгозные проблемы персистенции с ассоциацией 1 ко многим - PullRequest
0 голосов
/ 27 июня 2011

У меня есть следующая модель:

class Bill
 . . . some fields . . .
belongs_to :sponsor, :class_name => "Legislator"
end
class Legislator
  .. .some fields . . .
  has_many :bills
end

У меня странное поведение, но я уверен, что это что-то простое:

Loading development environment (Rails 3.0.7)
b = Bill.first
l = Legislator.first
l.bills << b
l.save
=> true
(I can view l.bills, but l.bills.all.to_a.count is 0)
 l.govtrack_id
=> 400001
ruby-1.9.2-p180 :007 > Legislator.where(govtrack_id: 400001).first.bills
 => [] 

Так что я могу создать ассоциацию и просмотреть ее. Сохранение прошло успешно, но когда я извлекаю объект, связь исчезает. , , ошибок нет. Я в замешательстве, что мне не хватает?

1 Ответ

2 голосов
/ 27 июня 2011

Вам не хватает inverse_of на вашей Legislator модели.Я провел быстрый тест (чтобы убедиться, что не было проблемы с Mongoid).Мои модели были такими:

class Bill
  include Mongoid::Document
  include Mongoid::Timestamps
  field :name
  belongs_to :sponsor, :class_name => "Legislator"
end

class Legislator
  include Mongoid::Document
  include Mongoid::Timestamps

  field :govtrack_id
  has_many :bills, :inverse_of => :sponsor
end

И консольный вывод из теста:

ruby-1.9.2-p180 > Bill.create(:name => "A new bill")
  => #<Bill _id: 4e0822636a4f1d11c1000001, _type: nil, created_at: 2011-06-27 06:25:39 UTC, updated_at: 2011-06-27 06:25:39 UTC, name: "A new bill", sponsor_id: nil>
ruby-1.9.2-p180 > Legislator.create(:govtrack_id => "400123")
  => #<Legislator _id: 4e0822786a4f1d11c1000002, _type: nil, created_at: 2011-06-27 06:26:00 UTC, updated_at: 2011-06-27 06:26:00 UTC, govtrack_id: "400123">
ruby-1.9.2-p180 > l = Legislator.first
ruby-1.9.2-p180 > l.bills << Bill.first
  => [#<Bill _id: 4e0822636a4f1d11c1000001, _type: nil, created_at: 2011-06-27 06:25:39 UTC, updated_at: 2011-06-27 06:26:08 UTC, name: "A new bill", sponsor_id: BSON::ObjectId('4e0822786a4f1d11c1000002')>] 
ruby-1.9.2-p180 > l.save!
  => true
ruby-1.9.2-p180 > Bill.first.sponsor.govtrack_id
  => "400123"
ruby-1.9.2-p180 > Legislator.first.bills
 => [#<Bill _id: 4e0822636a4f1d11c1000001, _type: nil, created_at: 2011-06-27 06:25:39 UTC, updated_at: 2011-06-27 06:26:08 UTC, name: "A new bill", sponsor_id: BSON::ObjectId('4e0822786a4f1d11c1000002')>]
...