Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 可能的最小和最大日期_Ruby On Rails_Ruby_Date - Fatal编程技术网

Ruby on rails 可能的最小和最大日期

Ruby on rails 可能的最小和最大日期,ruby-on-rails,ruby,date,Ruby On Rails,Ruby,Date,我正在创建一个过滤部分视图,用户可以在其中使用日历从-日期和到-日期中选择一个。然后在模型范围内使用这些日期在数据库查询中执行SQLWhere子句。如果用户未选择其中一个日期,则应指定默认值:从到的最小可用日期和最大可用日期 unless params[:from].blank? and params[:to].blank? from = begin Date.parse(params[:from]) rescue ??? end to = begin Date.parse(para

我正在创建一个过滤部分视图,用户可以在其中使用日历从-日期和到-日期中选择一个
。然后在模型范围内使用这些日期在数据库查询中执行SQL
Where
子句。如果用户未选择其中一个日期,则应指定默认值:
的最小可用日期和最大可用日期

unless params[:from].blank? and params[:to].blank?
   from = begin Date.parse(params[:from]) rescue ??? end
   to = begin Date.parse(params[:to]) rescue ??? end
   @model_instances = @model_instances.start_end from, to
end
(……)


scope:start\u end,->(start\u date,end\u date){其中('(:start\u date如果没有给出参数,您可以跳过
start
end
日期上的条件:

if params[:from].present? and params[:to].present?
  @model_instances.start_end(params[:from], params[:to]) 
end

然后,您将得到与日期无关的结果,因为没有填写来自
和/或结束日期的

您可以将日期范围与模型值进行比较,如果参数未通过,则设置默认值

#setup default if desired, or you can skip if params are blank
from = params[:from] || default_from
to = params[:to] || default_to
@model_instances.start_end(from, to)
如果您使用activerecord的日期范围,则您的范围将类似于此

scope :start_end, ->(start_date, end_date){where(from: start_date..end_date, to:start_date..end_date)}

如果没有
params[:from]
params[:to],则可以跳过此过程
是给定的,因此任何日期都将与query@MrYoshiji我添加了模型范围代码。我需要我的SQL查询工作,即使用户只选择了一个日期。如果只提供了两个日期中的一个,并且如果两个日期使用
start\u end
scope提供。我认为这是最好的方式,因为在这种情况下,您不会“试图猜测最终用户未提供的日期”
scope :start_end, ->(start_date, end_date){where(from: start_date..end_date, to:start_date..end_date)}