【发布时间】:2010-08-08 03:46:09
【问题描述】:
我在 Rails 3 上,我有一个 SQL 查询,它由我在 Arel 中建立的几个连接组成。我想从我的一个模型中的方法运行此查询,但我不确定如何执行此操作。 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
我在这里要做的是获取用户拥有的每家餐厅提供的所有餐点中使用的所有成分。成分_for_user 变量代表我希望运行的 Arel 查询。我只是不确定如何运行和返回所有成分,而且 Ingredient.find_by_sql... 似乎不正确。
结束
【问题讨论】:
-
请显示您当前生成查询所需的代码。
-
@pushmatrix 你怎么解决这个问题?
标签: ruby-on-rails ruby database arel