我正在調試一些Rspec測試,並在我的數據庫中遇到了一些非常奇怪的情況。基本上我有兩個模型,Invited和Group。邀請belongs_to羣組。ActiveRecord顯示具有不同屬性的相同記錄,具體取決於它如何引用
所以我有兩個不同的變量引用相同的Invited記錄。理論上講,這兩個變量應該屬於同一組記錄。實際上,我的記錄中的所有ID都匹配,除了組記錄中的單個屬性不匹配。下面是一些控制檯輸出演示:
[54] pry> invited
=> #<Invited id: 1, email: "[email protected]", confirmation_token: "3460b1f237f0e7cb97eb3a325bd79cbdb0696405", subscribed: false, groups_training_level_id: 1, group_id: 1, created_at: "2015-12-20 01:47:03", updated_at: "2015-12-20 01:47:03">
[55] pry> inv
=> #<Invited id: 1, email: "[email protected]", confirmation_token: "3460b1f237f0e7cb97eb3a325bd79cbdb0696405", subscribed: false, groups_training_level_id: 1, group_id: 1, created_at: "2015-12-20 01:47:03", updated_at: "2015-12-20 01:47:03">
[56] pry> Group.all
=> [#<Group id: 1, name: "Brandi", start_at: "2015-12-19 05:00:00", expire_at: "2015-12-27 04:59:59", program_id: 3, speciality_id: 3, created_at: "2015-12-20 01:47:02", updated_at: "2015-12-20 01:47:02">]
[57] pry> invited.group
=> #<Group id: 1, name: "Brandi", start_at: "2015-12-19 05:00:00", expire_at: "2015-12-27 04:59:59", program_id: 2, speciality_id: 3, created_at: "2015-12-20 01:47:02", updated_at: "2015-12-20 01:47:02">
[58] pry> inv.group
=> #<Group id: 1, name: "Brandi", start_at: "2015-12-19 05:00:00", expire_at: "2015-12-27 04:59:59", program_id: 3, speciality_id: 3, created_at: "2015-12-20 01:47:02", updated_at: "2015-12-20 01:47:02">
[59] pry> Group.where(program_id: 2)
=> []
正如你所看到的,invited
和inv
都引用相同的記錄。只有一組記錄存在,id: 1
。當我做invited.group
和inv.group
時,帶有正確ID的組出現,但是program_id不同!我對此感到困惑,我希望有人能在這裏闡明一些看法。我很樂意提供更多信息,請不要猶豫,問。
我在Rails 3.2和mysql2(0.3.18)上。
編輯以包括更多的信息:
我可以一致地重現此,雖然步驟有點複雜。 invited
由FactoryGirl產生:
let!(:invited) { FactoryGirl.create(:invited, email: sub.email, group: group) }
sub
引用包含電子郵件的模型。 inv
是使用ActiveRecord這樣以後檢索:
inv = Invited.includes(group: :program).where(email: sub.email)[0]
果然,Group.count
回報1
。
你能否退出你的rails控制檯並嘗試重新創建場景。同時輸入「Group.count」的值 – Raman
您能否添加關於您的模型的信息;因爲你的模型似乎存在一些問題。 – VKatz
不是FactoryGirl一個嘲諷框架 - 爲什麼你期望FactoryGirl創建的對象與從DB讀取的對象相匹配?從你的'pry'輸出中可以清楚的看出'inv'和它的'group'與DB是一致的。 –