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
。然后在模型范围内使用这些日期在数据库查询中执行SQLWhere
子句。如果用户未选择其中一个日期,则应指定默认值:从
到
的最小可用日期和最大可用日期
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)}