2012-07-04 39 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

雅這將工作,但我正在尋找最佳的方式,爲什麼軌道添加額外的條件。 –