Это действительно странное поведение. Я не уверен, относится ли это только к IRB или к ActiveRecord. Вы заметите, что ассоциация правильно сохраняется в базе данных, но результаты вызовов IRB на счетчиках ассоциации неверны. Используя ваш пример:
>> 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
>> p1.call_list_memberships.length
=> 2 # Huh?
>> p1.call_list_memberships.size
=> 2 # Wtf?
>> p1.call_list_memberships.count
=> 1 # That's more like it
>> p1.reload # refresh the data
>> p1.call_list_memberships.length
=> 1 # now the associations are correct
>> p1.call_list_memberships.size
=> 1
Что еще более странно, он повторяет строку таблицы соединений в ассоциации - проверьте идентификаторы объектов двух CallListMemberships, и вы увидите, что они одинаковы.
EDIT
Создание ассоциации с использованием таблицы соединений, по-видимому, позволяет избежать этой проблемы:
>> p1=PoliticalDistrict.create(:name=>"Sample")
=> #<PoliticalDistrict id: 1, type: "PoliticalDistrict", name: "Sample", user_id: nil, county_id: nil, state_id: nil, created_at: "2010-11-14 21:33:09", updated_at: "2010-11-14 21:33:09">
>> n1=Number.create(:phone_number=>"123")
=> #<Number id: 1, phone_number: "123", created_at: "2010-11-14 21:33:22", updated_at: "2010-11-14 21:33:22">
>> p1.call_list_memberships.create(:number=>n1)
=> #<CallListMembership id: 1, call_list_id: 1, number_id: 1, created_at: "2010-11-14 21:33:39", updated_at: "2010-11-14 21:33:39">
>> p1.call_list_memberships
=> [#<CallListMembership id: 1, call_list_id: 1, number_id: 1, created_at: "2010-11-14 21:33:39", updated_at: "2010-11-14 21:33:39">]
>> p1.call_list_memberships.length
=> 1