首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails 3-选择不包括关联模型的对象?

Rails 3-选择不包括关联模型的对象?
EN

Stack Overflow用户
提问于 2013-10-31 23:26:51
回答 2查看 91关注 0票数 0

(使用Rails 3)

我有两个模型(车辆和能力)在一个has_many通过关联。

因此,车辆1可以有能力1(如拖曳),能力2(如乘客),能力3(如飞行)等。

代码语言:javascript
复制
v = Vehicle.first
v.capabilities.pluck(:name) #=> will give something like ['towing', 'passenger', 'flying']

我想找到所有没有特殊能力的车辆(如所有不能飞行的车辆)。

我尝试过类似于下面的查询,但它仍然包括飞行器,我认为主要是因为飞机也有其他功能。

代码语言:javascript
复制
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实现都是受欢迎的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-04 07:09:50

最后,我做了一些类似的事情,受到了Thaha答案的启发。

代码语言:javascript
复制
# 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
票数 0
EN

Stack Overflow用户

发布于 2013-11-01 09:22:39

尝试这个查询

代码语言:javascript
复制
non_flying = Vehicle.all - Vehicle.includes(:capabilities).where('capabilities.id IN (?)', [2,3]).all
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19718369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档