我有两种模式:
class Member < ActiveRecord::Base
has_many :member_tags
end
和
class MemberTag < ActiveRecord::Base
belongs_to :member
# has a column 'tag'
end
我想执行以下连接: Member.all(:joins =&gt;:member_tags,:conditions =&gt;“所有没有带有tag =”hidden“的member_tag的成员)
我该怎么做?我想这更像是一个SQL问题,而不是一个轨道问题:)
答案 0 :(得分:1)
我认为这可以解决问题:
select `members`.*
from `members`
LEFT JOIN `member_tags`
ON `members`.id = `member_tags`.member_id
where `members`.id NOT IN (select `members`.id
from `members`
LEFT JOIN `member_tags`
ON `members`.id = `member_tags`.member_id
where `member_tags`.tag = 'hidden'
);
答案 1 :(得分:0)
我无法想出更好的东西,这是一个丑陋的方法,因为它为n个成员触发(n + 1)sql查询
Member.all.select {|member| !(member.member_tags.map(&:tag).include? "hidden")}