我正在使用 Ruby on Rails 3.2.2,我想检索由两个或多个用户同时关联的对象/记录。也就是说,我有一个数据库表,用于存储用户和文章之间的关联数据;我想“构建”一个SQL 查询,以便检索两个或多个用户的相关文章。例如,如果我有以下关联对象
#<UserArticleAssociation id: 1, user_id: 1, article_id: 1>
#<UserArticleAssociation id: 2, user_id: 1, article_id: 2>
#<UserArticleAssociation id: 3, user_id: 1, article_id: 3>
#<UserArticleAssociation id: 4, user_id: 2, article_id: 1>
#<UserArticleAssociation id: 5, user_id: 2, article_id: 2>
#<UserArticleAssociation id: 6, user_id: 3, article_id: 1>
#<UserArticleAssociation id: 7, user_id: 3, article_id: 3>
#<UserArticleAssociation id: 8, user_id: 4, article_id: 4>
我会声明/运行一个范围方法,以便获得如下内容:
@user1.articles.associated_by(@user2)
# => [ #<UserArticleAssociation id: 1, user_id: 1, article_id: 1>,
#<UserArticleAssociation id: 4, user_id: 2, article_id: 1>]
@user1.articles.associated_by(@user3)
# => [ #<UserArticleAssociation id: 1, user_id: 1, article_id: 1>,
#<UserArticleAssociation id: 7, user_id: 3, article_id: 3>]
@user1.articles.associated_by(@user4)
# => nil
@user2.articles.associated_by(@user3)
# => [ #<UserArticleAssociation id: 1, user_id: 1, article_id: 1>]
@user1.articles.associated_by([@user2, @user3])
# => [ #<UserArticleAssociation id: 1, user_id: 1, article_id: 1>]
换句话说,我想通过user_article_associations
表格找到一组用户共有的文章。我怎样才能做到这一点?
涉及的类表示为
class User < ActiveRecord::Base
has_many :article_associations, :class_name => 'UserArticleAssociation'
has_many :articles, :through => :article_associations
end
class Article < ActiveRecord::Base
has_many :user_associations
has_many :users, :through => :user_associations
end