Rails通过关联的存在来排序

时间:2016-10-10 18:54:33

标签: ruby-on-rails sql-order-by

想象一下下面的表格:

  

类粉丝<的ActiveRecord :: Base的
    has_many:fan_influencers   端

     

类影响者<的ActiveRecord :: Base的
    has_many:fan_influencers   端

我想要一个让风扇返回所有影响因素的方法,这些影响因素取决于风扇是否与影响者有关系。这意味着与风扇具有fan_influencers关系的影响者将首先出现。 我怎样才能做到这一点?我在影响者模型中有这种方法,但它不依赖于粉丝:

  

def self.index_results_for_fan(粉丝)

     

Influencer.includes(:fan_influencers).order('fan_influencers.influencer_id NULLS LAST')

     

这是更复杂方法的一部分(由其他字段排序并使用与其他查询的联合等)。

2 个答案:

答案 0 :(得分:0)

怎么样:

Influencer
  .includes(:fan_influencers)
  .where(fan_id: fan.id)
  .order('fan_influencers.influencer_id NULLS LAST')

我猜你在Fan_influencers中有Fan的外键,因为它是多对多的关系。

答案 1 :(得分:0)

我认为一旦你达到一定程度的复杂性,如果你对SQL感到满意,那么你最好创建一个封装了这种复杂性的视图(比如其他表中存在记录,连接,以及工会)。

在视图顶部创建模型,使其成为只读模型,并通过关联将其与其他模型相关联。

这将极大地简化您的Rails代码。