1

我有关系,就像用户有很多文章和文章属于用户一样。
因此,为了找到用户的文章(处于活动状态),我在文章模型中添加了 named_scope

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

什么时候做——

user.articles.active_articles

它按预期正确给出,但在控制台查询中有重复条件 -

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

如何限制条件的重复?

如何为关联添加条件?

我正在使用 rails 2.3.5.Thanks 提前。

4

2 回答 2

0

我不确定,但我认为重复的原因是因为第一部分“user.articles 将生成 WHERE ( articles.user_id = 52)”,第二部分“articles.active_articles 将生成 AND ((active = true) AND ( articles.user_id = 52))"

因此,当您同时调用这两个部分 user.articles.active_articles 时,它将生成(articles.user_id = 52)AND((active = true)AND(articles.user_id = 52))

你可以调用article.active_articles 吗?并发布结果?

于 2012-07-04T07:57:34.473 回答
0

您可以在您的用户模型中放置以下 has_many 关联:

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

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

我知道它不如 Article 模型上的 named_scope 好,但它确实消除了 ActiveRecord 生成的 SQL 查询中的条件重复

于 2012-07-06T10:41:06.283 回答