想象一下下表:
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 回答
怎么样:
我猜你在Fan_influencers中有Fan的外键,因为它是多对多的关系 .
我认为一旦你达到一定程度的复杂性,如果你对SQL感到满意,那么你最好创建一个封装了这种复杂性的视图(比如其他表,连接和联合中是否存在记录) .
在视图顶部创建模型,使其成为只读模型,并通过关联将其与其他模型相关联 .
这将极大地简化您的Rails代码 .