2016-10-10 58 views
1

想象以下表:導軌以便通過相關聯的存在

類範<的ActiveRecord ::基地
的has_many:fan_influencers 端

類影響者<的ActiveRecord ::基地
的has_many:fan_influencers end

我想要一個給予粉絲回報的方法,讓所有影響者根據粉絲是否與該影響者有關係進行排序。這意味着與粉絲有fan_influencers關係的影響者會首先出現。 我該怎麼做?我在影響者模型這種方法,但它不依賴於風機:

高清self.index_results_for_fan(風扇)

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

這是一種更復雜的方法的一部分(即由其他字段訂單和使用聯合與其他查詢等)。

回答

0

如何:

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

我猜你有fan_influencers風扇的外鍵,因爲它是一個多一對多的關係。

+0

這是一個好主意,雖然你只得到那些與粉絲實際上有聯繫的人,對吧? –

0

我認爲一旦你達到一定的複雜程度,如果你對SQL感到滿意,那麼你最好創建一個視圖來封裝複雜性(如其他表中的記錄的存在和聯接,和工會)。

在視圖頂部創建模型,使其成爲只讀模型,並通過關聯將其與其他模型關聯。

這將極大地簡化您的Rails代碼。

+0

由於查詢中的其他原因,我避免了原始的sql。我只是結束了兩個不同的活動記錄關係,並使用聯合寶石加入他們使用排序鍵來保持秩序。 –