我正在使用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
有可能吗?
答案 0 :(得分:0)
由于您有两个单独的关联,因此至少需要两个查询。
如果您总是想要来自这两个地方的文章,除了这两个独立的文章之外,还有什么能阻止您进行简单的“文章”关联吗?这样,您就可以使用self.articles.public
检索文章。