在每个特定记录上使用连接条件 - rails

时间:2017-06-09 11:13:28

标签: ruby-on-rails ruby ruby-on-rails-4

当我遇到这种情况时,我是新手,并且介于两者之间:

我有Car modelLocation ModelRide Model

和关系如:

Car [id, title, is_active, is_online ]
has_many :locations
has_name :rides

CarLocation [id, latitude, longitude, car_id]
belongs_to :car

Ride [id, slat, slng, elat, elng, is_accepted, is_completed, is_cancelled ]
belongs_to car

我想立即获取所有 car_locations 汽车 活动在线并且该汽车不应该有任何当前的骑行,意味着汽车不应搭乘(is_accepted==true and is_completed==false and is_cancelled==false

我使用了类似的东西,

@carlocations = CarLocation.joins([car: :rides]).where( "cars.is_online=? and cars.is_active=? and (rides.is_accepted !=? and rides.is_completed!= ? and rides.is_cancelled !=?)", category.id, true, true,false,true,true).distinct(:car)

但没有得到正确的结果。

1 个答案:

答案 0 :(得分:2)

您应该将5个值传递给您只发送3的查询

("cars.is_online=? and cars.is_active=? and (rides.is_accepted =? and rides.is_completed= ? and rides.is_cancelled =?)", category.id, true, true)

尝试此查询

@carlocations = 
  CarLocation
  .joins(car: :rides)
  .where(
    is_online: true, is_active: true, 
    rides: { is_accepted: true, is_completed: false, is_cancelled: false }
  )

另外,检查一下您是否错过了:中的belongs_to car或者只是一个错字

Ride [id, slat, slng, elat, elng, is_accepted, is_completed, is_cancelled ]
belongs_to :car