2012-11-11 98 views
0

我是新的rails,並且Im很難用rails的方法編寫查詢。Rails - 複雜的查詢

我想要完成的是有一個食堂模型,有很多餐,但我只想顯示當天提供的餐點。

所以我創建了一個食堂模型,has_many餐。 然後我創建了Served_date模型,屬於__餐和餐has_many Served_dates,因此我們可以指定餐時的多個日期。

我該如何進行查詢?

//P.S:Served_date.where(served_at: Date.today)回報Served_dates正在今天擔任

謝謝!

+0

出於好奇,你打算有不止一個食堂嗎?並且可以有一頓飯有很多食堂嗎? Served_date模型有哪些屬性? – Ashitaka

+0

是的,將會有多個食堂(它的意思是我的大學)。食堂 - 餐飲關係假設爲many_to_many,因爲多個食堂服務例如炸奶酪,但後來我意識到他們從不花費相同的費用,所以會產生不必要的問題,因此它只是一個on_to_many關係。 ServedDate只有servered_at:日期和引用餐的外鍵 – urSus

回答

1

首先,模型名稱不應該按照慣例強調,因此您應該使用ServedDate而不是Served_date。

該查詢應該給你你需要的東西:

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

謝謝!順便說一句,有可能將它納入到像Canteen.find(params [:id]).feeds.served_on(Date.today)這樣的顯示動作,還是我必須修改查詢? – urSus

+0

當然,你可以做到這一點。範圍可以在關聯上調用,也可以與其他範圍鏈接。 – PinnyM