如何使用两列创建关联

时间:2013-08-30 02:39:23

标签: sql ruby-on-rails activerecord

我有两个表,userscouplescouples表有一对外键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个对象。是否有(非弃用的)方法?

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

1 个答案:

答案 0 :(得分:0)

仔细阅读文档(http://guides.rubyonrails.org/association_basics.html),您可能能够解决这个问题:

用户模型:

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

夫妻模特:

belongs_to :users 

另外,如果您试图联系领导者和粉丝,请查看自我加入部分。

希望这有帮助。

相关问题