레일 3을 사용 중이며 Arel에서 빌드 한 몇 개의 조인으로 구성된 SQL 쿼리가 있습니다. 내 모델 중 하나의 메서드에서이 쿼리를 실행하고 싶지만이 작업을 수행하는 방법을 잘 모르겠습니다. arel 개체는 Arel :: InnerJoin 유형으로 밝혀졌으며 해당 쿼리에서 반환 된 모든 개체의 배열을 검색하려고합니다. 그렇게하기 위해 ModelName.find_by_sql (my_arel_query_object)을 실행합니까? 아니면 my_arel_query_object.each {...}를 실행하고 배열로 수동으로 팝하기 위해 각 튜플을 반복합니까?레일즈 3에서 복잡한 Arel 쿼리를 실행하는 방법
나는 분명히하고 싶다. 어떤 통찰력이라도 대단히 감사하겠습니다. 감사.
업데이트 :
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
내가 여기서 할 노력하고있어하면 사용자가 소유 한 각 식당에서 제공하는 모든 식사에 사용 된 모든 재료를 얻을 수 있습니다 : 여기 내 사용자 모델 내에서 사용하는 코드입니다. ingredients_for_user 변수는 실행하려는 Arel 쿼리를 나타냅니다. 난 그냥 & 모든 성분을 반환하는 방법을 모르겠습니다, 그리고 Ingredient.find_by_sql ... 그냥 옳은 것 같지 않습니다.
끝
코드를 보여주십시오
는다음처럼보기에서 메소드를 호출 현재 쿼리를 생성해야합니다. –
방금 내 글에 추가했습니다. – pushmatrix
@ pushmatrix 어떻게이 문제를 해결할 수 있습니까? – squiter