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

skr*_*lyk 3 jquery controller ruby-on-rails view

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

这是我的代码:

    <%= form_tag(:controller => "financial_reports", :action => 'index', :method => 'post') do%>//maybe this line should be edited
   <%= datepicker_input "report","start_date", :dateFormat => "dd/mm/yy" %>
  <%= datepicker_input "report", "end_date", :dateFormat => "dd/mm/yy"%>
  <%end%>
Run Code Online (Sandbox Code Playgroud)

并生成HTML():

  <form accept-charset="UTF-8" action="/financial_reports?method=post" method="post"...>
  <input id="report_start_date" name="report[start_date]" size="30" type="text" class="hasDatepicker"><script type="text/javascript">
<input id="report_end_date" name="report[end_date]" size="30" type="text" class="hasDatepicker"
    <input class="btn wide" id="btn-report" name="commit" type="submit" value="Run Report">
  </form>
Run Code Online (Sandbox Code Playgroud)

我可以像这样得到datepicker值:

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

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

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

    @financial_reports = current_user.financial_reports.where(:created_at => start_date.to_date..end_date.to_date)
Run Code Online (Sandbox Code Playgroud)

或者我应该添加其他行动或方法?你能建议什么?

Ohg*_*why 5

在我看来,使用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 
  } 
});`  
Run Code Online (Sandbox Code Playgroud)

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

var the_start = params[:start_date],
    the_end = params[:end_date]
Run Code Online (Sandbox Code Playgroud)

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

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

render :layout => false
Run Code Online (Sandbox Code Playgroud)

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

祝好运!