Rails 4 - 如何根据条件获取特定记录

时间:2016-03-07 11:41:38

标签: ruby-on-rails

我有一个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

2 个答案:

答案 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