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で作業しています。よろしくお願いします。

4

2 に答える 2

0

よくわかりませんが、繰り返される理由は、最初の部分「user.articles が WHERE ( articles.user_id = 52) を生成する」と、2 番目の部分「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 関連付けを User モデルに入れることができます。

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

そして、user.active_articles を介してアクティブな記事に直接アクセスします。

Article モデルの named_scope ほど良くないことはわかっていますが、ActiveRecord によって生成される SQL クエリの条件の重複を排除します。

于 2012-07-06T10:41:06.283 に答える