2012-07-04 35 views
1

我有像用户一样的关系,有许多文章和文章属于用户。
所以,找到用户的文章(这是活动的)我曾在文章模型与named_scope重复条件的活动记录关联

named_scope :active_articles, :conditions => "active = true" 

,并添加named_scope做 - 当

user.articles.active_articles 

它正确地给出了预期,但在控制台上查询已重复条件 -

SELECT * FROM `articles` WHERE (`articles`.user_id = 52) AND ((active = true) AND (`articles`.user_id = 52)) 

如何限制重复条件?

如何添加条件关联?

我正在使用导轨2.3.5.Thanks提前。

+0

我的$ 0.02生成的SQL查询条件句重复:信任查询优化器,而不是担心。如果你使用PostgreSQL这样的数据库,你可以做“分析”,看看这两个查询将会完全相同(我预测)。 – pedz

回答

0

我不知道,但我认为这是重复的原因是因为第一部分 “user.articles会产生WHERE(articles .user_id = 52)” 和第二部分 “articles.active_articles将产生AND((活动=真)AND(articles .user_id = 52))”

所以当你调用这两个部分user.articles.active_articles 就会产生(articles .user_id = 52)和((活动=真) AND(articles .user_id = 52))

您可以致电文章。 active_articles?并发布结果?

+0

它将如何工作?它总是给予undefind方法active_articles? –

+0

是的,对不起,我没有写清楚,我的意思是可能是你必须找到具体的文章,然后article.active_articles,所以它不会重复。 – piam

0

你可以把下面的has_many协会在你的用户模型:

has_many :active_articles, :conditions => {:active => true }, :class_name => "Article" 

然后直接访问通过user.active_articles活动的文章。

我知道这是不是因为在文章模型named_scope一样好,但它的确消除了这是由ActiveRecord的

+0

雅这将工作,但我正在寻找最佳的方式,为什么轨道添加额外的条件。 –