0

コードのリファクタリングと最適化を試みていました。特に、データベースへのクエリの量を減らしたいと考えていました。私のユーザーコントローラーでは非常にうまく機能しましたが、同じことを試した別のコントローラーではうまくいきませんでした。なぜうまくいかなかったのか、しばらく答えを探しましたが、実際には答えられません。

登録を通じてコースを購読できるユーザーがいます。それらは has_many :through などの関係を通じて接続されています。以下の作品:

@users_courses = current_user.courses
@courses = @users_courses.a_named_scope

しかし、私のコースコントローラーでは、以下は機能しません:

@all_courses = Course.all
@specific_course = @all_courses.specific_course_scope

スコープはそれぞれのモデルで定義され、適切に機能します。それらは複雑ではなく、「どこで...真/偽」の定義だけです。誰かがここの問題を知っていますか?ありがとう!

Rails バージョン 3.2 と Ruby バージョン 2 を使用しています。

4

1 に答える 1

2

Rails 4 までは、代わりにインスタンス (他のスコープを呼び出すことができる) を返しscopedたい場合は、メソッドを使用する必要があります。ActiveRecord::RelationArray

@all_courses = Course.scoped
@specific_course = @all_courses.specific_course_scoped

これはうまくいくはずです。

を使用する場合はincludes(:courses)、次のようにします。

@specific_course = @all_courses.specific_course_scoped.includes(:courses)
于 2013-08-05T15:41:50.610 に答える