Rails的左连接上的两个键没有返回连接字段

问题描述:

我有两个表的事件和分配Rails的左连接上的两个键没有返回连接字段

events      assignments 
=====      ============ 
sport_id      sport_id 
home_school_id    school_id 
name       division_id 

而且我想选择的事件,并加入像这样的分配:

joins = "LEFT JOIN assignments sa on events.sport_id = sa.sport_id 
     AND events.home_school_id = sa.school_id" 
events = Event.find(:all, :joins => joins) 

问题是这个不返回除法_id。为什么不 ?是因为没有关联吗?

我应该不能做events.first.division_id?我试过这在MySQL中,它工作正常。

编辑

我的事件模型关联

has_many :assignments, 
    :primary_key => :sport_id, 
    :foreign_key => :sport_id, 
    :finder_sql => 
     'SELECT sa.* ' + 
     'FROM events e, assignments sa ' + 
     'WHERE e.sport_id = sa.sport_id AND e.home_school_id = sa.school_id ' + 
     'ORDER BY e.event_date' 

我结束了使用composite_primary_keys宝石: https://github.com/drnic/composite_primary_keys

这可以让你有多个外键。之后,我做了一个包括(像GrantG的回答)。最后,我用钢轨GROUP BY函数从其他表中的数据进入散列:

divisions_hash = events.group_by{|item| item.assignment.division_id} 

至于我可以告诉我原本想做的事(加入其他表中的活动记录中的属性每条记录的结果)在Rails中是不可能的。

你应该尝试:

events = Event.find(:all, :include => [:assignments]) 

然后进入内部分工:

events.first.assignment.division_id 

这是假设你告诉事件是h as_many:分配

+0

我的问题是,我在查询中需要这些数据,所以我可以将所有赋值数据返回到查询中并按顺序排列。这就是为什么我使用连接。我将无法调用'.assignment.division_id'(即使在我添加了上述关联后,它仍然不适用于我)。 – cbron 2012-07-16 15:59:26