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)) %>');

これが私のコントローラーです(「どこ」の条件をどこと呼ぶべきかわかりません

       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リクエストはにあるjavascriptをトリガーする必要があります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にタイプミスがあり、 appendをappendする必要があります

他に問題があるかどうかはわかりませんが、それではすでに機能しなくなるため、これ以上調べませんでした。

于 2012-08-07T12:25:08.650 に答える