Ruby on rails Rails 4-如何根据where条件获取特定记录

Ruby on rails Rails 4-如何根据where条件获取特定记录,ruby-on-rails,Ruby On Rails,我有一个Sale型号,带有:offer\u end列和日期数据类型。我想显示销售的具体记录,其中:offer\u end>=Date.today。我试着让它在控制器中工作,但我不确定什么是正确的语法来实现这一点。这是我目前正在做的但不起作用的事情: def index @shops = Shop.all @sales = Sale.where("offer_end >= Date.today", {offer_end: params[:offer_end]}) en

我有一个
Sale
型号,带有
:offer\u end
列和
日期
数据类型。我想显示
销售
的具体记录,其中
:offer\u end>=Date.today
。我试着让它在控制器中工作,但我不确定什么是正确的语法来实现这一点。这是我目前正在做的但不起作用的事情:

  def index
    @shops = Shop.all
    @sales = Sale.where("offer_end >= Date.today", {offer_end: params[:offer_end]})
  end

您可以对这些类型的操作使用作用域:

class Sale < ActiveRecord::Base
    scope :get_products, ->(date){where(" sales.offer_end >= ? ", date)}
end
或者您可以直接在控制器中使用它:

@sales = Sale.where("offer_end >= ?", Date.today)

您可以使用
参数[:offer\u end]
而不是
日期。今天

您可以为这些类型的操作使用范围:

class Sale < ActiveRecord::Base
    scope :get_products, ->(date){where(" sales.offer_end >= ? ", date)}
end
或者您可以直接在控制器中使用它:

@sales = Sale.where("offer_end >= ?", Date.today)

您可以使用
params[:offer\u end]
而不是
日期。今天
首先,您不能传递
日期。今天
作为字符串传递到查询,它将传递到数据库,而数据库不会理解它

查询应该是这样的

@sale = Sale.where('offer_end > ?', Date.today)
将计算
Date.today
,然后将其作为值传递给查询

您可以用任何日期对象或日期字符串替换
Date.today
,在您的情况下,这些对象或字符串似乎位于
参数[:offer\u end]

@sale = Sale.where('offer_end > ?', params[:offer_end])

首先,您不能将
日期作为字符串传递给查询,它将被传递给数据库,而数据库无法理解它

查询应该是这样的

@sale = Sale.where('offer_end > ?', Date.today)
将计算
Date.today
,然后将其作为值传递给查询

您可以用任何日期对象或日期字符串替换
Date.today
,在您的情况下,这些对象或字符串似乎位于
参数[:offer\u end]

@sale = Sale.where('offer_end > ?', params[:offer_end])

您可以使用范围执行此操作,只需在销售模型中创建参数范围并传递参数值。您可以使用范围执行此操作,只需在销售模型中创建参数范围并传递参数值。
“Date.today@MohammadAbuShady纠正了错误。我无法让范围部分工作,但第二个选项起作用。谢谢<代码>“Date.today@MohammadAbuShady更正了错误。我无法使范围部分工作,但第二个选项工作。谢谢!