【问题标题】:Determining intersection of two HABTM relationships in rails 3确定rails 3中两个HABTM关系的交集
【发布时间】:2011-03-10 22:12:39
【问题描述】:

我有以下关系:

class Article < ActiveRecord::Base
has_and_belongs_to_many :required_certs, :class_name=>"Certification"
...
end

class User < AR::B
has_and_belongs_to_many :certifications
...
end

我希望能够找到与文章具有相同认证的所有用户。因此,如果一篇文章有​​证书 A 和 B,而用户有 A、B、C、D,则该用户将被返回。只有 A 或只有 B 的用户不会。所以本质上,像

User.joins(:certifications).where('certifications.id IN (?)', @article.required_certs.collect{|c| c.id})

我认为我必须使用 AND 而不是使用 IN 运算符,因为我只想要拥有所有指定证书的用户。

我很难过,所以任何帮助将不胜感激!

谢谢

【问题讨论】:

    标签: sql ruby-on-rails ruby-on-rails-3 has-and-belongs-to-many


    【解决方案1】:

    我就是这样做的,不过我愿意接受更优雅的解决方案!

    @certs = @article.required_certs.collect{|c| c.id}
    User.all(:joins=>:certifications, 
             :group=>User.attributes_for_sql, 
             :select=>'users.*', 
             :conditions => ['certifications.id in (?)', @certs], 
             :having=> "count(*)=#{@certs.length}")
    

    希望这对某人有所帮助!

    【讨论】:

    • 由此产生的 SQL 是什么?
    • 我想我也有类似的问题:stackoverflow.com/questions/5779354/…。不幸的是,您的解决方案对我来说没有意义。 User.attributes_for_sql 来自哪里?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多