如何"合并"不止一个'ActiveRecord :: Associations'和一个或多个范围方法?

时间:2012-06-22 17:55:09

标签: sql ruby-on-rails ruby ruby-on-rails-3 activerecord

我正在使用Ruby on Rails 3.2.2和MySQL。 我想“合并”多个ActiveRecord::Associations和一个或多个范围方法的结果。也就是说,我有:

class User < ActiveRecord::Base
  has_many :a_user_relationships, :foreign_key => 'a_key'
  has_many :b_user_relationships, :foreign_key => 'b_key'

  has_many :a_articles, :through => :a_user_article_associations # Returns objects kind of 'Article'
  has_many :b_articles, :through => :b_user_article_associations # Returns objects kind of 'Article'
end

class Article < ActiveRecord::Base
  # Note: This is a scope method.
  def self.public
    where(:status => 'public')
  end
end

鉴于上面的代码,我想运行一些方法(如下所示),以便通过执行尽可能少的数据库查询来撤销所有 public “a”和“b”用户文章:

@user.all_articles

class User < ActiveRecord::Base
  # Note: Code in the following method is incorrect, but maybe it helps
  # understanding what I mean.
  def all_articles
    self.(a_articles & b_articles).public
    (self.a_articles.public & self.b_articles.public)
  end
end

有可能吗?

1 个答案:

答案 0 :(得分:0)

由于您有两个单独的关联,因此至少需要两个查询。

如果您总是想要来自这两个地方的文章,除了这两个独立的文章之外,还有什么能阻止您进行简单的“文章”关联吗?这样,您就可以使用self.articles.public检索文章。