首页 文章

Rails通过关联的存在来排序

提问于
浏览
1

想象一下下表:

class Fan <ActiveRecord :: Base has_many:fan_influencers end class Influencer <ActiveRecord :: Base has_many:fan_influencers end

我想要一种方法,让风扇返回所有有影响的人,根据风扇是否与影响者有关系排序 . 这意味着与风扇具有fan_influencers关系的影响者将首先出现 . 我怎样才能做到这一点?我在影响者模型中有这种方法,但它不依赖于风扇:

def self.index_results_for_fan(粉丝)Influencer.includes(:fan_influencers).order('fan_influencers.influencer_id NULLS LAST')结束

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

2 回答

  • 0

    怎么样:

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

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

  • 0

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

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

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

相关问题