(使用Rails 3)
我有两个模型(车辆和能力)在一个has_many通过关联。
因此,车辆1可以有能力1(如拖曳),能力2(如乘客),能力3(如飞行)等。
v = Vehicle.first
v.capabilities.pluck(:name) #=> will give something like ['towing', 'passenger', 'flying']我想找到所有没有特殊能力的车辆(如所有不能飞行的车辆)。
我尝试过类似于下面的查询,但它仍然包括飞行器,我认为主要是因为飞机也有其他功能。
non_flying = Vehicle.includes(:capabilities).where('capabilities.id NOT IN (?)', [2,3])
non_flying.first.capabilities.pluck(:name) #=> will give something like ['towing']. 请注意,飞行能力不包括在内,但我只是不希望这辆车在任何时候返回。我该怎么写这个?
如果可能的话,我宁愿不使用meta_wheel或squeel,但是除非有更简单的解决方案,否则任何arel_table实现都是受欢迎的。
发布于 2013-11-04 07:09:50
最后,我做了一些类似的事情,受到了Thaha答案的启发。
# Get all flying vehicles first
subquery = Vehicle.joins(:capabilities).where("capabilities.id IN (?)", 3).pluck("vehicles.id")
# Then get all vehicles not in this flying vehicles array
non_flying = Vehicle.where('vehicles.id NOT IN (?)', subquery).all发布于 2013-11-01 09:22:39
尝试这个查询
non_flying = Vehicle.all - Vehicle.includes(:capabilities).where('capabilities.id IN (?)', [2,3]).allhttps://stackoverflow.com/questions/19718369
复制相似问题