如果我有一个名为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
我想找到那些有通知的用户,其名称属性是"电子邮件"。
感谢
一个联接应该做到这一点:
User.joins(:parents).uniq
由于这会创建一个INNER JOIN
,因此它将只返回带有父级的记录。uniq
删除联接可能返回的重复记录。
编辑:
你的方法链可以这样工作:
User.includes(:notifications).joins(:parents).where(:role => "Teen").where("notifications.name = 'email'")