存在于关联中的订单元素,其中第一个元素将是存在于最多选定关联中的元素。 换句话说,按给定列表存在大多数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