2012-11-11 48 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