将JQuery Datepicker数据传递给Rails控制器

我是Rails和JQuery的新手,所以我会尽力解释这个问题。 我正在尝试将我的JQuery datepicker值传递给我的rails控制器。 该页面上有数据,我希望用户能够根据日期范围进行过滤。 关于这个主题有很多不同的post:

将变量从jquery传递给rails控制器

如何将变量从AJAX表单传递到控制器?

我试图遵循这些post的指导,但我仍然遇到麻烦。

这是我的部分_ dateFilter.html.erb =>

 'events', :action => 'dateFilter', :class => 'date_form'}, :remote => true) do %>  'dateFilter', :dateFormat => 'mm/dd/y' %>  'dateFilter', :dateFormat => 'mm/dd/y' %>   

这是生成的HTML =>

  
// //

这是dateFilter.js.erb =>

 $('.dateFilter').append(''); 

这是events_controller =>

  def dateFilter @events = Event.find(:all, :conditions => ["EVENT_DATE_TIME_LOCAL BETWEEN ? AND ?", params[:start_date], params[:end_date]]) respond_to do |format| format.html format.json { render json: @events } format.js end end 

最后这里是application.js =>

 $(document).ready(function() { $('#date_form').submit(function (){ $.ajax({ type: 'POST', url: "/events/dateFilter", beforeSend: function (xhr) {xhr.setRequestHeader("Accept", "text/javascript");}, data: { 'start_date' : $("input[name='event[start_date]']").datepicker(), 'end_date' : $("input[name='event[end_date]']").datepicker()} success: function(data) { } }); }); 

这是来自server =>的日志数据

 Started POST "/events/dateFilter?class=date_form" for 127.0.0.1 at 2012-12-12 15:09:39 -0500 Processing by EventsController#dateFilter as JS Parameters: {"utf8"=>"✓", "authenticity_token"=>"J/HU+DxNmIwEhu3keN071k6MGCCD/n/1UhXUD0MkH1Q=", "event"=>{"start_date"=>"12/06/12", "end_date"=>"12/13/12"}, "commit"=>"Submit", "class"=>"date_form"} Event Load (1.7ms) SELECT "TBLEVENT".* FROM "TBLEVENT" WHERE (EVENT_DATE_TIME_LOCAL BETWEEN NULL AND NULL) Rendered collection (0.0ms) Rendered events/dateFilter.js.erb (0.3ms) Completed 200 OK in 8ms (Views: 3.4ms | ActiveRecord: 1.7ms) 

其中一个问题是我一直在为我想要传递的数据值获取“NULL”。 我甚至不确定我是否正确地做到这一点,对此的任何帮助/反馈将不胜感激。 谢谢。

从您的日志数据中,这是在Parameters

 "event"=>{"start_date"=>"12/06/12", "end_date"=>"12/13/12"} 

这意味着start_dateend_date都在一个名为event的Hash event ,因此你的控制器应如下所示:

 def dateFilter eventIn = params[:event] @events = Event.find(:all, :conditions => ["EVENT_DATE_TIME_LOCAL BETWEEN ? AND ?", eventIn[:start_date], eventIn[:end_date]]) respond_to do |format| format.html format.json { render json: @events } format.js end end 

另一件小事 – form_tag class应该像这样设置:

 <%= form_tag({:controller => 'events', :action => 'dateFilter'}, :class => 'date_form', :remote => true) do %>