将JQuery Datepicker数据传递到Rails Controller [英] Passing JQuery Datepicker Data to Rails Controller

查看:76
本文介绍了将JQuery Datepicker数据传递到Rails Controller的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm new to Rails and JQuery so I'll try to explain this as best I can. I'm trying to pass my JQuery datepicker values to my rails controller. The page has data on it that I want the user to be able to filter based on a date range. There are a number of different posts on this subject:

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

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

How to pass variables from AJAX form into controller?

我试图遵循这些帖子的指导,但是我仍然遇到麻烦.

I have tried to follow the guidance of these posts, but I'm still having trouble.

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

    <%= form_tag({:controller => 'events', :action => 'dateFilter', :class => 'date_form'}, :remote => true) do %>
    <%= datepicker_input "event", :start_date, :class => 'dateFilter', :dateFormat => 'mm/dd/y' %>
    <%= datepicker_input "event", :end_date, :class => 'dateFilter', :dateFormat => 'mm/dd/y' %>
    <%= submit_tag "Submit" %>
    <% end %> 

这是生成的 HTML =>

    <form accept-charset="UTF-8" action="/events/dateFilter?class=date_form" data-remote="true" method="post">
    <input class="dateFilter" id="event_start_date" name="event[start_date]" size="30" type="text" /><script type="text/javascript">

   //<![CDATA[
   jQuery(document).ready(function(){jQuery('#event_start_date').datepicker({"dateFormat":"mm/dd/y"})});
   //]]>
   </script>

   <input class="dateFilter" id="event_end_date" name="event[end_date]" size="30" type="text" /><script type="text/javascript">

   //<![CDATA[
   jQuery(document).ready(function(){jQuery('#event_end_date').datepicker({"dateFormat":"mm/dd/y"})});
   //]]>
   </script>

   <input name="commit" type="submit" value="Submit" />
   </form>  

这是 dateFilter.js.erb =>

$('.dateFilter').append('<%= escape_javascript(render(@events)) %>');

这是 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) { <%= render "events/dateFilter" %>}
    });

 });

这是来自服务器的日志数据 =>

This is log data from the 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".我什至不确定我是否会正确处理此问题,对此的任何帮助/反馈将不胜感激.谢谢.

One of the problems is that I keep getting "NULL" for the values of data I am trying to pass. I'm not even sure that I am going about this correctly, any help/feedback on this would be greatly appreciated. Thanks.

推荐答案

从您的日志数据中,该数据位于Parameters:

From your log data, this is in the Parameters:

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

表示start_dateend_date在名为event的哈希中,因此您的控制器应如下所示:

which means start_date and end_date are in a Hash called event, so your controller should look like this:

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应该设置如下:

One other small thing - the form_tag class should be set like so:

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

这篇关于将JQuery Datepicker数据传递到Rails Controller的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆