Баунти в размере 25 долларов США за первое рабочее решение.Strange has_many: через выпуск с добавлением объектов в коллекцию
Я вижу действительно странное has_many: через проблему с ActiveRecord.
С этими классами:
create_table :numbers do |t|
t.string :phone_number
end
create_table :call_lists do |t|
t.string :type
t.string :name
t.integer :user_id
t.integer :county_id
t.integer :state_id
end
create_table :call_list_memberships do |t|
t.integer :call_list_id
t.integer :number_id
end
class CallList < ActiveRecord::Base
attr_accessible :name
has_many :call_list_memberships, :autosave => true
has_many :numbers, :through => :call_list_memberships, :autosave => true
belongs_to :user
end
class PoliticalDistrict < CallList
end
class CallListMembership < ActiveRecord::Base
belongs_to :call_list
belongs_to :number
end
class Number < ActiveRecord::Base
attr_accessible :phone_number
has_many :call_list_memberships
has_many :call_lists, :through => :call_list_memberships
end
Я получаю такое поведение:
>> p1 = PoliticalDistrict.first
=> #<PoliticalDistrict id: 2, type: "PoliticalDistrict", name: "Random political district", user_id: nil, county_id: nil, state_id: nil>
>> p1.numbers
=> []
>> p1.call_list_memberships
=> []
>> n1 = Number.first
=> #<Number id: 1, phone_number: "07921088939">
>> p1.numbers << n1
=> [#<Number id: 1, phone_number: "07921088939">]
>> p1.numbers
=> [#<Number id: 1, phone_number: "07921088939">]
>> p1.call_list_memberships
=> [#<CallListMembership id: 6, call_list_id: 2, number_id: nil>, #<CallListMembership id: 6, call_list_id: 2, number_id: nil>]
>> p1.save
=> true
Добавление объекта к: путем сбора, как представляется, добавить два элемента в корневой ассоциации, как отсутствует идентификатор объект добавлен.
Есть ли у кого-нибудь идеи, почему это может произойти?
Edit: Даже это не работает:
>> pd2.call_list_memberships.create :number => Number.first
=> #<CallListMembership call_list_id: 2, number_id: nil>
>> Number.first
=> #<Number id: 1, phone_number: "07921088939">
>> pd2.call_list_memberships
=> [#<CallListMembership call_list_id: 2, number_id: nil>]
Не решение, но вы должны добавить 'create_table: call_list_memberships,: id => false do | t |' – Zabba
Просто отметим, что я исключил имя класса Number (попробованное PhoneNumber) и политический университет STI в качестве вклада в Эта проблема. –
Zabba, вы совершенно правы, но удаление идентификатора из CallListMemberships теперь приводит к созданию трех создаваемых записей, что делает его еще менее значимым. –