子模型有两个属性

时间:2015-03-31 15:34:31

标签: ruby-on-rails

我的Driver模型has_many Workables

如何要求Drivers workable vehicle_idxhas_vehicletrue的{​​{1}}列表?

希望包含Drivers两个可行的,其中一个具有正确的vehicle_id,另一个具有has_vehicle } == true

理想情况下,我可能想要一个范围。

我已尝试过以下操作,但在Driver.rb中没有返回任何记录:

  scope :has_vehicle, -> (vehicle) {
    joins(:workables).
    where('workables.vehicle_id = ?', vehicle).
    where('workables.has_vehicle = ?', true) }

我可以选择这样的方法,但它看起来非常慢:

   arr = []
   Workable.where(vehicle: x).where(has_vehicle == true).each do |e|
      arr += e.drivers.map(&:id)
   end
   @drivers = @drivers.where(id: arr)

如果我使用预先加载,上述速度是否快?

1 个答案:

答案 0 :(得分:0)

找到一种功能强大且速度相当快的方法:

driver_ids = Workable.where(driver_id: @drivers.collect(&:id)).where('vehicle_id = ? and has_vehicle = ?', params[:vehicle].to_i, true).collect(&:driver_id)
@drivers = @drivers.where(id: driver_ids)