当我遇到这种情况时,我是新手,并且介于两者之间:
我有Car model
,Location Model
和Ride 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)
但没有得到正确的结果。
答案 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