我有一个简单的连接查询,在某些情况下返回具有未初始化关联的 ActiveRecord 对象,我试图理解原因。(我的设置:带有MySQL的rails 2.3.8(
这是我的模型:
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,...]
但是,当我再次运行它并尝试访问成员的任何关联时,我得到零异常。打印显示以下内容:
print result[0].member, result[0].member.class.reflect_on_all_associations(:has_many)
#=> <Member...>, [-- empty ---]
看起来成员对象没有任何关联,因此当我尝试访问其中任何一个时,我得到一个异常。
您是否知道为什么 ActiveRecord 在某些情况下不会初始化返回对象的关联?我会欣赏任何半个想法,因为我被卡住了。
这是上述查询生成的 SQL(Ran 代表我发布了这个问题(。SQL 的字段比查询多,因为我在发布查询时简化了查询,删除了与问题无关的条件。
SELECT `twitter_status_relations`.`id` AS t0_r0,
twitter_status_relations
.twitter_status_id
作为t0_r1,twitter_status_relations
.source_twitter_identity_id
作为t0_r2,twitter_status_relations
.relation_type
如t0_r3,twitter_status_relations
.relation_data
作为t0_r4,twitter_status_relations
.linked_twitter_identity_id
作为t0_r5,twitter_status_relations
.user_id
作为t0_r6,twitter_status_relations
.linked_member_id
t0_r7,members
.id
如t1_r0,members
.user_id
t1_r1,members
.name
t1_r2,members
.members
.member_rating
如t1_r4,members
.created_at
t1_r5,members
.updated_at
作为t1_r6,members
.merged_with_member_id
t1_r7,members
.engage_rating
正如t1_r8,members
.support_rating
t1_r9,members
.user_engage_rating
如t1_r10,members
.user_support_rating
作为t1_r11,members
.influence_rating
t1_r12,members
.twitter_username
正如t1_r13,members
.lead_rating
作为t1_r14,members
.follow_rating
t1_r15,members
.unfollow_rating
AS t1_r16,members
.followers_count
t1_r17,members
.hidden
AS t1_r18从twitter_status_relations
左外连接members
members
.id =twitter_status_relations
.linked_member_id 其中 (twitter_status_relations
.user_id
= 1 和twitter_status_relations
.relation_type
IN( "提及","回复","received_dm","转推","链接","术语","主题标签"( 和twitter_status_relations
.linked_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,436225,662513,138608,138338 (( 和twitter_status_relations
.ID IN (8304, 26493, 113492, 113638, 1, 6, 41213, 113493, 20, 26173( 分组依据 twitter_status_relations.linked_member_id ORDER BY members.member_rating