0

如果我有一个名为 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

而且我想找到那些通知名称属性为“电子邮件”的用户。

谢谢

4

1 回答 1

0

加入应该这样做:

User.joins(:parents).uniq

由于这会创建一个INNER JOIN,它只会返回父母的记录。uniq删除可能由连接返回的重复记录。

编辑

您的方法链接可以像这样工作:

User.includes(:notifications).joins(:parents).where(:role => "Teen").where("notifications.name = 'email'")
于 2012-11-25T21:08:54.150 回答