我有三種模式。用戶,網頁和網絡。在軌道中交叉列表的最快方法是什麼?
- 用戶have_many網絡
- 網絡belong_to用戶和頁面
- 頁面have_many網絡。
我在寫一個Page#visible_to?(user)
方法,並想知道是否比我現在做的更快/更高效/更好的方法。如果任何用戶的網絡也鏈接到頁面,該方法應該返回true。
當前實現:
def visible_to?(user)
return true if networks.empty
user_network_ids = user.networks.pluck(:id)
!networks.detect { |network| user_network_ids.include?(network.id) }.nil?
end
其他選項將包括利用&
操作者確定的交點,或者將這一方法上的用戶。思考?
SQL上的數據是?然後使用SQL來交叉,而不是首先將所有東西加載到ruby中。 – Reactormonk
網頁在哪裏發揮作用? 'networks'是否包含與頁面相關的網絡? –
'visible_to?'方法在Page上,所以是的。 – kddeisz