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