双重连接查询 Rails

7

我有三个模型,分别是JobPosting、Job和Organization。它们之间的关系如下:

  1. 一个Organization可以有多个Jobs。
  2. 一个Job属于一个Organization,并且有多个JobPostings。
  3. 一个JobPosting属于一个Job。

Job拥有一个叫做job_type的属性,我可以使用以下查询找到所有与特定job_type相关联的JobPostings:

JobPosting.joins(:job).where(jobs: { :job_type => 'volunteer' })

但我遇到的问题是如何使用组织属性进行相同类型的操作。组织有一个名为department的属性,那么我如何查询与具有特定部门的工作相关的组织的工作发布情况。我遇到麻烦的原因是因为组织本质上是两个级别,而工作只有一个级别。任何帮助将不胜感激。
1个回答

10

您可以按以下方式联接这两个关系:

JobPosting.
  joins(job: :organization).
  where(jobs: { job_type: 'volunteer' }, organizations: { organizations_attr1: 'value_to_test' })

joins(job: :organization) 确保在 job_postingsjobsorganizations 表之间进行正确的内部连接。如果您想探索Rails如何执行连接,请尝试在rails console中执行此操作并使用.to_sql检查生成的查询。


如果我进行以下查询:"JobPosting.joins(job: :organization).where(organizations: { department: 'conferences' })",则会出现错误:PG::InvalidTextRepresentation: ERROR: 无效输入语法的整数:"conferences",这里我使用了ActiveRecord:Enum用于department属性,而:conferences是一个选项,请参阅我的另一个问题:http://stackoverflow.com/questions/43081716/activerecordenum-pginvalidtextrepresentation-error-invalid-input-syntax。 - Robert Saunders
谢谢您的回答,它解答了我的问题,但也引发了另一个问题。 - Robert Saunders

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接