存在於關聯中的訂單元素,其中第一個元素將是存在於最多選定關聯中的元素。 換句話說,按給定列表存在大多數assosietions的順序元素。 聽起來很複雜,所以在這裏的工作示例,但超級慢。Rails通過大多數條件的訂單記錄符合
我們希望將汽車進行排序,以最驅動器可驅動他們
# we have some ids of driver seleted by user
dynamic_drivers_ids = [1,2,3,100,5]
@cars = Car.all.includes(:driving_levels)
@cars.sort_by {|e| (e.driving_level.map(&:driver_id) & dynamic_drivers_ids).size * -1 }
需要大約1個第二加載,只有20輛。 但現在我們有100輛車的情況,並且需要數十年來計算它。
我們如何編寫SQL請求來訂購? 它不工作,但顯示出一些邏輯:
Car.includes(:driving_levels).order("driving_level.id IN = ? AND driving_level.size", dynamic_drivers_ids)
數據庫表的樣子:
class Car
has_many :driving_levels
has_many :drivers, through: driving_levels
class DrivingLevel
belongs_to :car
belongs_to :driver
class Driver
has_many :driving_levels
has_many :cars, through: driving_levels
你的db是什麼? –
看來'汽車belongs_to driving_level'。所以看到'driving_level.map(&:driver_id)'很奇怪。請提供型號代碼。 –
我已更新表格 – GEkk