1

我有报告表(金额,日期)。我希望用户使用日期选择器选择日期并显示在用户选择的日期之间创建的报告。

所以我需要从 AJAX 表单中传递这些变量。

我添加了 AJAX 表单。这是我的_form.html.erb

<%= form_tag(:controller => "financial_reports", :action => 'report', :remote => true) do%>
  <span id="pickers">From</span> 
  <%= datepicker_input "report","start_date", :dateFormat => "dd/mm/yy" %>
  <span id="pickers2">To</span>
  <%= datepicker_input "report", "end_date", :dateFormat => "dd/mm/yy"%>
<%=  submit_tag "Run Report", :class => "btn super", :id => "btn "%>

我有部分,正在显示报告。|

_financial_report.erb.html

 <table class="table" id="performance_report">
  <thead>
  <th>Date</th>
<th>Amount</th>
<th>Currency</th>
  </thead>
 <% @financial_reports.each do |financial_report| %>
  <tr>
   <td> <%= financial_report.created_at.strftime("%d/%m/%Y")%></td> </td>
<td><%= financial_report.amount %></td>
<td><%= financial_report.currency %></td>
  </tr>
  <% end %>
    <tr>
  <td>Total</td>
  <td><%= current_user.financial_reports.sum(:amount)%></td>
  </tr>
     </table>

我正在我的index.erb.html上渲染这个部分

            <div id="report_form"><%= render 'form' %></div>
             <%= render 'financial_report' %>

在我的report.js.erb中,我想返回适当的报告:

         $('.report').apppend('<%= escape_javascript(render(@financial_report)) %>');

这是我的控制器(我不知道我应该在哪里调用“where”条件

       def index
          @financial_reports = current_user.financial_reports#.where(:created_at => the_start.to_date..the_end.to_date)
       ...
     end

或在这里

  def report
    @financial_reports = current_user.financial_reports#.where(:created_at => the_start.to_date..the_end.to_date)//here
     respond_to do |format|
    format.js
   end
  end

这是我的报告表单的 HTML:

     <form accept-charset="UTF-8" action="/financial_reports/report?remote=true" method="post">
     <input id="report_start_date" name="report[start_date]" size="30" type="text" class="hasDatepicker">
      <input id="report_end_date" name="report[end_date]" size="30" type="text" class="hasDatepicker">

在我的路线中:

        match 'financial_reports/report' => 'financial_reports#report'

我可以使用 AJAX 获取变量:

  $.ajax({ 
  type: 'POST', 
  url: 'financial_reports/report', 
  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. 

    } 
 }); 

我应该如何解决这个问题?也许,我误解了 AJAX 的东西?

PS 当我调用报告操作时,它会显示空白页。

4

2 回答 2

1

你说你能从 ajax 得到响应。但是你有没有从行动中返回任何东西?如果明确触发的 ajax 请求工作正常,这意味着您的路线很好。但是 ajax 请求应该触发你在report.js.erb. 如果这没有发生,我怀疑参数格式错误。我可以在您传递的 ajax 请求中看到:

  data: {'start_date' : $("input[name='report[start_date]']").val(), 
    'end_date' : $("input[name='report[end_date]']").val() } 

如果操作需要 params[:start_date] 和 params[:end_date] ,这很好。但是表单不会以那种格式发送参数。

我的建议:使用 firebug 或其他一些调试工具,确保它是一个 POST 请求,并且参数应该是预期的格式。检查请求的响应以查看返回值。这应该是一个“成功”的回应。还要检查控制器中的方法“report”是否是公共方法。

于 2012-08-08T10:06:09.047 回答
0

在您的 report.js.erb 中,您有错字,应该追加apppend

我不确定您是否还有其他问题,我没有进一步查看,因为那已经停止了它的工作。

于 2012-08-07T12:25:08.650 回答