0

我有两个表事件和作业

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'
4

2 回答 2

3

你应该试试:

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

然后得到里面的除法:

events.first.assignment.division_id

这假设您告诉事件是 has_many :assignments

于 2012-07-13T23:26:17.880 回答
0

我最终使用了composite_primary_keysgem: https ://github.com/drnic/composite_primary_keys

这允许您拥有多个外键。之后我只是做了一个包含(就像GrantG的回答)。最后,我使用 rails 的 group by 函数将另一个表中的数据放入哈希中:

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

据我所知,我最初想做的事情(在每条记录的活动记录结果中加入其他表属性)现在在 Rails 中是不可能的。

于 2012-07-20T20:54:23.390 回答