我有一个Sale
模型,其中:offer_end
列的数据类型为date
。我想显示Sale
:offer_end >= Date.today
的具体记录。我试图让它在控制器中工作,但我不确定实现这一目的的正确语法是什么。这就是我目前正在做的工作:
def index
@shops = Shop.all
@sales = Sale.where("offer_end >= Date.today", {offer_end: params[:offer_end]})
end
答案 0 :(得分:3)
首先,你不能将Date.today
作为字符串传递给查询,它将被传递给数据库,它将无法理解它。
查询应该是这样的
@sale = Sale.where('offer_end > ?', Date.today)
将评估Date.today
,然后将其作为值传递给查询。
您可以将Date.today
替换为任何日期对象或日期字符串,在您的情况下似乎位于params[:offer_end]
@sale = Sale.where('offer_end > ?', params[:offer_end])
答案 1 :(得分:2)
您可以将范围用于这些类型的操作:
class Sale < ActiveRecord::Base
scope :get_products, ->(date){where(" sales.offer_end >= ? ", date)}
end
在控制器中,您可以使用以下范围:
@sales = Sale.get_products(params[:offer_end])
或者您可以直接在控制器中使用它:
@sales = Sale.where("offer_end >= ?", Date.today)
您可以使用params[:offer_end]
代替Date.today