gpt4 book ai didi

ruby-on-rails - Rails - 按日期范围过滤

转载 作者:行者123 更新时间:2023-12-04 03:07:03 25 4
gpt4 key购买 nike

尝试创建一个过滤器选择以查找类(class)日期在给定日期范围内的时间表:

管理 Controller :

def find_schedules
if params[:start_date] && params[:end_date]
start_date = params[:start_date]
end_date = params[:end_date]
@schedules = Schedule.find(:all, :conditions => {:coursedate => start_date..end_date})
redirect_to :action => 'find_results'
end
end

find_schedules View :

<% form_tag(find_schedules_path) do %>
<%= select_date Date.today, :prefix => :start_date %>
<%= select_date Date.today, :prefix => :end_date %>>
<%= submit_tag "Submit", :disable_with => "Submitting..." %>
<% end %>

错误:

    Processing AdminController#find_schedules (for ...) [POST]
Parameters: {"start_date"=>{"month"=>"3", "day"=>"23", "year"=>"2011"}, "commit"=>"Submit", "authenticity_token"=>"...", "end_date"=>{"month"=>"2", "day"=>"16", "year"=>"2012"}}

ArgumentError (bad value for range)

我似乎总是在处理日期/日期时间方面遇到麻烦。 coursedate 是时间表表中的日期时间字段,如果有任何区别的话。我只需要搜索日期,而不是时间。由于 mysql 的存储方式,我是否需要以某种方式转换数据类型?或者...我还做错了什么?预先感谢您的帮助。

在 bdon 的帮助下更接近了,谢谢!现在我遇到了一个未定义的方法错误,但我应该能够弄清楚:

ActionView::TemplateError (undefined method `each' for nil:NilClass) on line #26 of /admin/find_results.html.erb:       
25: <tr class="<%= cycle('odd', 'even') %>">
26: <% @schedules.each do |schedule| %>

最佳答案

您收到此错误是因为“range”函数不支持在本例中传递的散列:

1.9.3-p0 :008 > {:year => 2012, :month => 11, :day => 1}..{:year => 2012, :month => 12, :day => 1}
ArgumentError: bad value for range

相反,您需要将范围的开始和结束设为 DateTime 对象:

1.9.3-p0 :010 > DateTime.new(2012,11,1)..DateTime.new(2012,12,1)
=> Thu, 01 Nov 2012 00:00:00 +0000..Sat, 01 Dec 2012 00:00:00 +0000

所以

start_params = params[:start_date]
start_date = DateTime.new(start_params["year"].to_i, start_params["month"].to_i, start_params["day"].to_i)

对结束日期做同样的事情。

关于ruby-on-rails - Rails - 按日期范围过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9317350/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com