2012-11-11 3 views
0

레일스에 익숙하지 않고 레일스 메소드를 사용하여 쿼리를 작성하는 데 어려움을 겪고 있습니다.레일즈 - 복잡한 쿼리

내가 달성하고자하는 것은 많은 식사가있는 Canteen 모델을 가지고 있지만 그날 제공되는 식사 만 표시하기를 원합니다.

그래서 Canneen 모델을 만들었습니다. 그 모델은 has_many Meals입니다. 그 다음에 우리는 Served_date 모델을 만들었습니다. belongs_to meal과 Meal has_many Served_dates를 사용하여 식사가 제공 될 때 여러 날짜를 지정할 수 있습니다.

어떻게 이런 식으로 쿼리를 작성합니까? 오늘을

감사를 제공하고있다

//P.S : Served_date.where(served_at: Date.today) 반환 Served_dates!

+0

호기심에서 벗어나서 하나 이상의 식당이있을 계획입니까? 그리고 식사에는 많은 식당이있을 수 있습니까? Served_date 모델에는 어떤 속성이 있습니까? – Ashitaka

+0

예, 여러 개의 식당이있을 것입니다 (제 대학에 해당). 캔틴 (Canteen) - 식사 관계는 여러 수통이 예를 들어 튀김 치즈를 제공하기 때문에 많은 것으로 추측되지만 그 다음에는 동일한 비용이 들지 않는다는 것을 깨달았습니다. 그래서 불필요한 문제를 일으킬 수 있습니다. 따라서 유일한 on_to_many 관계입니다. ServedDate에는 servered_at 만 있습니다 : 날짜와 외래 키를 참조하는 식사 – urSus

답변

1

첫째, 모델 이름을 관습에 따라 강조해서는 안되므로 Served_date 대신 ServedDate를 사용해야합니다.

이 쿼리는 당신이 필요로하는 무엇을 제공해야합니다

아직 더 나은
Meal.joins(:served_dates).where(served_dates: {served_at: Date.today}) 

, 당신은 그것을 매개 변수화 및 이식성이 될 수있는 범위으로 바꿀 수 있습니다

class Meal < ActiveRecord::Base 
    scope :served_on, lambda{|date| joins(:served_dates).where(served_dates: {served_at: date}) } 
end 

그리고 전화 :

Meal.served_on(Date.today) 
+0

감사합니다! Btw는 Canteen.find (params [: id]). meals.served_on (Date.today)와 같은 show 액션에 통합하거나 쿼리를 수정해야합니까? – urSus

+0

물론 가능합니다. 범위는 연결에서 호출 할 수 있으며 다른 범위와도 연결할 수 있습니다. – PinnyM