2

ユーザーのリストを返すクエリを格納するテーブルがあります。次に、論理 AND を使用して複数のクエリを実行する「Banana」モデルへのメソッド「get_public」があります。

だから、私がするとき

Banana.find(x).get_publicユーザーの配列を受け取ります (そのバナナ オブジェクトに適したユーザー)。

get_public メソッドは次のようになります。

def get_public
  pb = []
  banana_queries.each do |q|
    pb << User.find_by_sql(q.query)
  end
  pb.inject(:'&')
end

しかし、代わりに ActiveRecord::Relation を取得できれば素晴らしいと思います。私は後にこのようなことをしたい: Banana.find(x).get_public.where(...) get_public を変更してこれを達成する方法はありますか?

4

1 に答える 1

1

問題を正確に理解できたかどうかはわかりませんが、とにかく助けようとします。

ここで指定されているよう

  • where は ActiveRecord::Relation を返します
  • find (および関連する動的メソッド) は、単一のモデル オブジェクトを返します。

したがって、クエリを「joins」フィールドと「where」フィールドに分割することをお勧めします。新しいコードは次のようになります。

 pb << User.joins(q.query_joins).where(q.query_where)

また、Rails 4 では find メソッドが非推奨になるため、where を使用することをお勧めします。

ポイントをあまり見逃していないことを願っています:-)

于 2013-08-28T16:33:55.240 に答える