2009-07-29 7 views
0

モデルに「検索」メソッドがあります。これは、渡されるさまざまなパラメータに応じて、7つのテーブルを結合するSQLクエリを実行します。しかし、別の名前付きスコープでこのメソッドを使用しているときは、エラーが "配列の未定義メソッド呼び出し"に表示されます。レールで名前付きスコープの代わりにSQLを使用すると問題が発生する

しかし、この検索方法の代わりに私が名前付きスコープのグループを使用している場合、正常に動作します。 名前付きスコープとそのメソッドを統合する方法

+1

コードを表示すると – ErsatzRyan

答えて

0

コードを見ることなく確実にわかりにくいです。しかし、SearchメソッドがModelクラスで呼び出されることが意図されているように思えます。そして、named_scope呼び出しをチェーンするとき、検索メソッドが提供する配列で何をするかわからないか、または検索メソッドが何をするかを知らない名前スコープが提供するレコードの配列を使用します。

0

あなたの#searchメソッドはおそらく、named_scopeが期待する何らかのメソッドを実装していないもの(Array?)を返していると思います。 activerecord/lib/active_record/named_scope.rbのクイックルックから、#callを実装しているScopeオブジェクト(および他の非配列メソッドも多数)が返されます。それは連鎖スコープが機能する理由です。だから、配列はうまくいきません。

#searchメソッドをnamed_scopeに書き直すことはできますか?私はあなたが(私にとっては、少なくとも)複雑な定義を異常に得るつもりであることを理解していますが、結果を他のスコープと連鎖させることができます。

また、カスタム検索方法を有効にしてスコープを返すようにする方法(また、前後にチェーンして作業する必要があります)についてはどうでしょうか?おそらく大きな命名されたスコープよりもはるかに馬鹿です。

0

遅くて申し訳ありませんが、遅く返事をしましたが、答えが見つかりました 私は変数にクエリを格納し、次に私がfind_by_sqlを実行する名前付きスコープに渡しました。したがって、 は望ましい結果を得ます。

関連する問題