如何将数据从jQuery传递给控制器​​?

我有两个字段 – 结束日期和开始日期(日期范围),我应该将它们传递给控制器​​并重新加载此页面。

这是我的代码:

 "financial_reports", :action => 'index', :method => 'post') do%>//maybe this line should be edited  "dd/mm/yy" %>  "dd/mm/yy"%>  

并生成HTML():

  
<input id="report_end_date" name="report[end_date]" size="30" type="text" class="hasDatepicker"

我可以像这样得到datepicker值:

  $('#datepicker').datepicker({ onSelect: function(dateText, inst) { $("input[name='report[start_date]']").val(dateText); } }); 

我需要将它们传递给控制器​​并重新加载此页面,因为在此页面控制器中。

在这里,我需要通过法器价值

  @financial_reports = current_user.financial_reports.where(:created_at => start_date.to_date..end_date.to_date) 

或者我应该添加另一个动作或方法? 你能建议什么?

在我看来,使用AJAX而不是重新加载页面是最好的选择。 您只是尝试更新某些数据,并且没有理由执行完整页面刷新来执行此操作。 我不是RoR爱好者,但似乎我们可以通过 – >将数据发送到控制器

 $.ajax({ type: 'POST', url: 'path/to/controller', data: {'start_date' : $("input[name='report[start_date]']").val(), 'end_date' : $("input[name='report[end_date]']").val() }, success: function(data){ //data is whatever you RETURN from your controller. //an array, string, object...something } });` 

在你的RoR控制器中,你可以通过做…

 var the_start = params[:start_date], the_end = params[:end_date] 

现在您已经获得了控制器中的数据,您可以将该方法应用于它。 然后,当您准备好发送数据时, return, print, whatever您做什么来将数据发送到页面。

此外,默认情况下(访问控制器时)RoR需要向视图输出模板,因为我们只想更新数据,您需要使用类似的方法停止该默认操作 – >

 render :layout => false 

我希望这可以帮到你。 我真的不是一个RoR专家,但这是我在几次涉猎时使用的方法。

祝好运!

Rails 3现在有助手可以完全按照你的意愿行事。 这些被称为远程表单和链接。

这篇博客文章很好地解释了他们做了什么以及他们如何工作。