Rails 3 を使用しており、Arel で作成したいくつかの結合で構成される SQL クエリがあります。モデルの 1 つのメソッドからこのクエリを実行したいのですが、その方法がわかりません。arel オブジェクトは Arel::InnerJoin 型であることが判明したため、そのクエリから返されたすべてのオブジェクトの配列を取得したいと考えています。そのために ModelName.find_by_sql(my_arel_query_object) を実行する必要がありますか? または、 my_arel_query_object.each {...} を実行し、各タプルを反復処理して、手動で配列にポップする必要がありますか?
私は自分自身を明確にしていることを願っています。どんな洞察も大歓迎です。ありがとう。
更新: ユーザー モデル内で使用するコードは次のとおりです。
def get_all_ingredients
restaurants = Table(:restaurants)
meals = Table(:meals)
ingredients = Table(:ingredients)
restaurants_for_user = restaurants.where(restaurants[:user_id].eq(self.id))
meals_for_user = restaurants_for_user.join(meals).on(restaurants[:id].eq(meals[:restaurant_id]))
ingredients_for_user = meals_for_user.join(ingredients).on(meals[:id].eq(ingredients[:meal_id]))
return Ingredient.find_by_sql(ingredients_for_user.to_sql)
end
ここで私がしようとしているのは、ユーザーが所有する各レストランで提供されるすべての食事に使用されるすべての食材を取得することです。components_for_user 変数は、実行したい Arel クエリを表します。すべての成分を実行して返す方法がわかりません.Ingredient.find_by_sql ...は正しくないようです。
終わり