0
我一直在爲我的服務製作一個搜索頁面,它包含了幾個基於關聯的搜索參數,我可以想到一些凌亂的長SQL混亂,但是會更喜歡一些清潔方法,作爲樣本,Rails查詢包含關聯關係計數,最好使用範圍
class Person < ActiveRecord::Base
has_many :friends
end
朋友具有指示友誼的狀態的屬性,像friend_type
class Friend < ActiveRecord::Base
belongs_to :person
end
搜索表單將包括許多參數的東西,他們兩個人是尋找比交流更多的人某些朋友,以及有多少人擁有friend_type設置爲「bff」的朋友。
我想什麼做的是在模型的一些範圍的方法,並在控制器能夠做到這一點,
的人一些像這樣的模型範圍,
scope :by_friends_count_greater_than, lambda { |value| joins(:friends).where(#count friends#, value) if value }
scope :by_bff_count_greater_than, lambda { |value| joins(:friends).where(##count friends with bff status## , value) if value }
和呼叫他們在控制器等等,
@people = Person.by_friends_count_greater_than(params[:query][:friends_count])
.by_bff_count_greater_than(params[:query][:bff_count])
我一直在嘗試squeel,這似乎是一個很不錯的資產,認爲它可以調用查詢方法。是否有可能以這種方式完成搜索查詢?
如果有更好的方法來解決這個問題,那將非常感激。
這是我沒有想過的方式指定counter_cache,謝謝你建議。它可以處理普通朋友的計數,但如果我正確理解計數器緩存,則無法計算具有爲其設置的特定屬性的朋友。 – Saifis
不,但計數器緩存工作的方式也可以手工製作以進行高效查詢。如果需要的話 – yannick