Rails使用关联查询 - has_many

时间:2012-11-25 20:59:13

标签: ruby-on-rails activerecord

如果我有一个名为User的模型:

  has_many     :parent_relationships,
               :class_name            => "Relationship",
               :foreign_key           => :child_id,
               :dependent             => :destroy,
               :uniq => true
  has_many     :parents,
               :through               => :parent_relationships,
               :source                => :parent

所以,我希望能够找到至少拥有一个父级的用户。现在,如果我取一个特定的用户并且我user.parents,我会得到父母的列表,但是我如何在where子句中这样做呢?

我担心的是,现在我正在这样取出:

User.where({:role => 'Teen'})

所以,我想找到其角色是青少年并且至少拥有父母的所有用户。另外,为了使它更复杂,我想要考虑另一个协会:

 has_and_belongs_to_many :notifications

我想找到那些通知名称属性为“email”的用户。

由于

1 个答案:

答案 0 :(得分:0)

联接应该这样做:

User.joins(:parents).uniq

由于这会创建INNER JOIN,因此只会返回父母的记录。 uniq删除了可能由联接返回的重复记录。

修改

你的方法链可以这样:

User.includes(:notifications).joins(:parents).where(:role => "Teen").where("notifications.name = 'email'")