0

我有两张桌子,userscouples。该couples表有一对外键lead_idfollow_id指向该users表。我希望User班级有一个has_many关联,Couple可以选择给定用户是领导或关注的所有夫妇。我可以finder_sql像这样使用 SQL 来做到这一点:

has_many :couples, class_name: 'Couple', finder_sql:
    proc { <<-SQL
      SELECT couples.* FROM users
        JOIN couples ON (couples.lead_id = users.id
                          OR couples.follow_id = users.id)
      WHERE users.id = #{self.id}
    SQL
  }

这很好用,但:finder_sql显然已被弃用,所以我正在寻找另一种方法。我得到的最好的结果是使用这样的自定义关联范围:

has_many :couples, -> {
  joins('JOIN couples ON (couples.lead_id = users.id OR couples.follow_id = users.id)')
    .select('couples.*')
}, class_name: 'User', foreign_key: 'id'

但这会导致 ActiveRecord 返回User对象而不是Couple对象。有没有(不推荐的)方法可以做到这一点?

抱歉,如果标题不清楚,我愿意接受建议。

4

1 回答 1

0

浏览文档(http://guides.rubyonrails.org/association_basics.html),您也许可以摆脱这个问题:

用户型号:

has_many: :couples, as: lead
Has_many: :couples, as: follow

情侣款:

belongs_to :users 

此外,如果您试图将领导者和追随者联系起来,请查看自我加入部分。

希望这可以帮助。

于 2013-08-30T03:14:16.880 回答