如果我有一个名为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”的用户。
由于
答案 0 :(得分:0)
联接应该这样做:
User.joins(:parents).uniq
由于这会创建INNER JOIN
,因此只会返回父母的记录。 uniq
删除了可能由联接返回的重复记录。
修改强>:
你的方法链可以这样:
User.includes(:notifications).joins(:parents).where(:role => "Teen").where("notifications.name = 'email'")