当前位置: 首页 > 面试题库 >

如何找到同时拥有cat和dog的用户?

丰飞龙
2023-03-14
问题内容

我想对具有多对一关系的2个表进行搜索,例如

class User << ActiveRecord::Base
  has_many :pets
end

class Pet << ActiveRecord::Base
  belongs_to :users
end

现在说我有一些像这样的数据

users

id        name
1         Bob
2         Joe
3         Brian

pets

id        user_id  animal
1         1        cat
2         1        dog
3         2        cat
4         3        dog

我想做的是创建一个活动记录查询,该查询将返回同时拥有cat和dog的用户(即用户1-Bob)。

到目前为止,我的尝试是

User.joins(:pets).where('pets.animal = ? AND pets.animal = ?','dog','cat')

现在,我明白了为什么这行不通-它正在寻找既是dog又是cat的宠物,因此什么也不返回。我不知道如何修改它来给我我想要的答案。有没有人有什么建议?这似乎应该很容易-
似乎不是特别不寻常的情况。

- -编辑 - -

正如我刚刚发现Squeel一样,向这个问题添加一点尾声。这使您可以像这样构建子查询;

User.where{id.in(Pet.where{animal == 'Cat'}.select{user_id} & id.in(Pet.where{animal == 'Dog'}.select{user_id}))

这就是它将进入我的应用程序的方式。


问题答案:

使用子选择来约束结果:

User.joins(:pets).where(
  'id IN (SELECT user_id FROM pets WHERE animal = ?) AND
   id IN (SELECT user_id FROM pets WHERE animal = ?)',
  'cat', 'dog')


 类似资料:
  • 问题内容: 我只想在特定用户的许可下查找文件。例如,如果我想查找我具有完全许可权的文件。 我可能会做类似的事情: 但是,如果我想忽略root和其他用户的许可,该怎么办。 问题答案: 从…开始: 这意味着:查找以开头,由拥有的文件,其中group和other的权限可以是任何东西(在权限字符串前面),而用户权限仅是: 要仅搜索文件(无目录),然后添加。

  • 是否可以让ingress nginx使用一个ELB同时为l4和l7提供服务?我假设它不是基于以下注释: 我希望有人告诉我我错了;)

  • 问题内容: 我想使用以下代码将代码打印到文件中: 但是当我检查文件输出时,我得到了: 我试过用单引号引起来,但是输出中也带有单引号。如何避免这个问题? 问题答案: 您只需要进行最小的更改;在此处单引号此处文档分隔符。 或等效的反斜杠转义: 如您发现的一样,如果不引用,此处的文档将进行变量替换,对反引号进行求值等。 如果需要扩展某些而非全部值,则需要逐个转义要避免的值。 将产生 如@fedorqui

  • 我用的是spring soap ws。 我有以下对应于复杂类型的JAXB域类 我有以下带有@XmlRegistry注释的类 以下是endpoint 当我发出 Soap 请求时,我正在使用 soap 请求中的终结点中给出NAMESPACE_URI。 在这里,在这种情况下,我得到以下回应 如果我使用"超文本传输协议://命名空间/url"作为NAMESPACE_URI在endpoint和肥皂请求我得到

  • 在第一次评估Artifactory之后,我发现在进行初始设置并选择Maven和Gradle集成时,它为我创建了两组存储库,这让我感到困惑 平台-gradle-dev-local 平台-分级-发布-本地 平台-libs-release-local 平台-libs-snapshot-local 有什么理由使用两个gradle repos,或者我可以对所有构建都使用标准的Maven repos吗?Gra

  • 我想只信任一个构建变体中的证书。怎么做?