2011-08-16 63 views
1

我有一個簡單的連接查詢,它在某些情況下返回具有未初始化關聯的ActiveRecord對象,並試圖理解原因。 (我的設置:導軌2.3.8與MySQL)ActiveRecord返回具有未初始化關聯的模型對象

這裏是我的模型:

class Member 
has_many :twitter_status_relations 
//has some more unrelated associations 
end 

class TwitterStatus 
    has_many :twitter_status_relations 
end 

class TwitterStatusRelation 
belongs_to :member 
belongs_to :twitter_status 
end 

這裏是我的查詢執行:

result = TwitterStatusRelation.all(:joins => :twitter_status, 
:conditions=>{:twitter_statuses=>{:sent_at=>1.month.ago..DateTime.now}}, :include=>:member,:group=>"twitter_status_relations.member_id") 

現在,當我在它的運行在應用程序第一次,它工作正常:

print result[0].member, result[0].member.class.reflect_on_all_associations(:has_many) 
#=> <Member...>, [<ActiveRecord::Reflection::AssociationReflection,...] 

但是,當我再次運行它,並嘗試訪問該成員的任何社團,我得到無前ception。打印顯示以下內容:

print result[0].member, result[0].member.class.reflect_on_all_associations(:has_many) 
#=> <Member...>, [-- empty ---] 

貌似成員對象沒有任何關聯,所以當我嘗試訪問任何信息,我得到一個異常。

你知道爲什麼ActiveRecord在某些情況下不會初始化返回對象的關聯嗎?我會感激任何一半的想法,因爲我卡住了。

回答

0

這是上面查詢產生的SQL(冉代表我發佈了這個問題)。 SQL在查詢中包含更多字段,因爲我在發佈查詢時簡化了查詢,刪除了與問題無關的條件。

SELECT `twitter_status_relations`.`id` AS t0_r0, 

twitter_status_relationstwitter_status_id AS t0_r1, twitter_status_relationssource_twitter_identity_id AS t0_r2, twitter_status_relationsrelation_type AS t0_r3, twitter_status_relationsrelation_data AS t0_r4, twitter_status_relationslinked_twitter_identity_id AS t0_r5, twitter_status_relationsuser_id AS t0_r6, twitter_status_relationslinked_member_id AS t0_r7,membersid AS t1_r0,membersuser_id AS t1_r1,membersname AS t1_r2, membersemail AS t1_r3,membersmember_rating AS t1_r4, memberscreated_at AS t1_r5,membersupdated_at AS t1_r6, membersmerged_with_member_id AS t1_r7,membersengage_rating AS t1_r8,memberssupport_rating AS t1_r9, membersuser_engage_rating AS t1_r10, membersuser_support_rating AS t1_r11, membersinfluence_rating AS t1_r12,memberstwitter_username AS t1_r13,memberslead_rating AS t1_r14, membersfollow_rating AS t1_r15,membersunfollow_rating AS t1_r16,membersfollowers_count AS t1_r17,membershidden AS t1_r18 FROM twitter_status_relations LEFT OUTER JOIN members ON members .ID = twitter_status_relations .linked_member_id WHERE (twitter_status_relationsuser_id = 1 AND twitter_status_relationsrelation_type IN( '提', '回覆', 'received_dm', '轉推' ,'link','term','hashtag') AND twitter_status_relationslinked_member_id IN( 83995,128457,21421,138316,128455,97475,128453,436231,82236,441208,138564,138337,436223,436222,441093 ,21194,441088,441092,438998,442752,138331,138327,138325,444897,9277,12,509521,13,15,534511,7606,7447,200,7,4,17200,5,652302,1,5536 ,18770,652301,214082,150870,436228,81204,436 225,662513,138608,138338 ))AND twitter_status_relations .ID IN(8304,26493,113492,113638, 1,6,41213,113493,20,26173)GROUP BY twitter_status_relations.linked_member_id ORDER BY members.member_rating