我有报告表(金额,日期)。我希望用户使用datepickers选择日期并显示在用户选择的日期之间创建的报告。
所以我需要从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 中,我想要返回apporpiate报告:
$('.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的东西?
P.S。当我调用报告操作时,它会显示空白页面。
答案 0 :(得分:1)
您说您可以从ajax获得回复。
但是你从行动中归还了什么吗?
如果明确触发时ajax请求正常工作,那意味着你的路由没问题。但是ajax请求应该触发report.js.erb
中的javascript。
如果没有发生,我怀疑参数格式错误。我可以看到你在传递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请求,参数应该是预期的格式。检查请求的响应以查看返回值。这应该是一个“成功”的回应。还要检查控制器中的“报告”方法是否为公共方法。
答案 1 :(得分:0)
在你的report.js.erb中,你有一个拼写错误, apppend 应追加
我不确定你是否还有其他问题,我没有进一步研究,因为那样会阻止它的运作。