2015-12-20 34 views
1

我正在調試一些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) 
=> [] 

正如你所看到的,invitedinv都引用相同的記錄。只有一組記錄存在,id: 1。當我做invited.groupinv.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

+0

你能否退出你的rails控制檯並嘗試重新創建場景。同時輸入「Group.count」的值 – Raman

+0

您能否添加關於您的模型的信息;因爲你的模型似乎存在一些問題。 – VKatz

+0

不是FactoryGirl一個嘲諷框架 - 爲什麼你期望FactoryGirl創建的對象與從DB讀取的對象相匹配?從你的'pry'輸出中可以清楚的看出'inv'和它的'group'與DB是一致的。 –

回答

0

(這是一個有點難以回答這個問題,沒有更多的信息,但我給它一個去反正。)

顯然,program_id是invinvited不同。據我所知,這種情況發生的唯一方法是,某些代碼實際上正在更改內存中的一個,或者數據庫中後來變爲inv的內容。你在內存中擁有的對象在你將它加載到內存中時會擁有它所擁有的任何內容,以及它自加載以來更改的任何狀態。這通常會與數據庫中的不同。

我想看看invited在創建它之後,並且還要查找group實例的更改。也許你正在改變group參考文獻的某處。或者你有一些鉤子改變了模型(當涉及到軌道時,這是一個常見的挫折來源)。

相關問題