Ruby on Rails 3.2.13
Redmine:2.3.1.stable
浏览器:Chrome,Firefox,最新版本
我尝试通过日期选择器提交开始日期和结束日期,然后使用所选值重新加载当前页面。基于此值,执行查询并将数据显示在HTML表中。我们认为这种方法可能比摆弄JavaScript更容易。我们认为错了......
问题是,虽然POST请求已正确执行(全部调试!)并且新的HTML代码已正确提交(Firebug显示!)新内容从不显示,无论如何我们在show
函数中执行!
查看器(show.html.erb):(简化,有两个日期选择器,一个提交按钮和一个段落文本)
<%= form_tag("/report_show", remote: true, :id => 'report_form', :name => 'report_form') do %>
<fieldset class="attributes">
<div>
<p>
<label for='start_date'><%= l("from") %></label>
<%= text_field_tag 'start_date', @report_start_date.strftime("%Y-%m-%d"), :size => 10 %><%= calendar_for('start_date') %>
</p>
<p>
<label for='end_date'><%= l("to") %></label>
<%= text_field_tag 'end_date', @report_end_date.strftime("%Y-%m-%d"), :size => 10 %><%= calendar_for('end_date') %>
</p>
</div>
</fieldset>
<p class="buttons">
<button type="submit" id="report_submit"><%= l(:button_apply)%></button>
</p>
<%end%>
<p>end date: <%= @report_end_date %></p>
正如您所看到的,我留下的唯一可修改信息是HTML段落,它只显示@report_end_date
。但是,单击提交按钮时它永远不会改变。
控制器(report_controller.rb):
class ReportController < ApplicationController
unloadable
# redirect user to current month selection
def index
@user = User.current
@report_start_date = Date.civil(Date.today.year, Date.today.month, 1)
@report_end_date = Date.civil(Date.today.year, Date.today.month, -1)
render "show"
end
# show the time report for the selected time period
def show
@user = User.current
@report_start_date = Date.strptime(params[:start_date], "%Y-%m-%d")
@report_end_date = Date.strptime(params[:end_date], "%Y-%m-%d")
end
end
路线:
post 'report_show', :to => 'report#show'
通过默认网址加载页面。执行函数index
并呈现show.html
。日期显示当月的第一个和最后一个。
选择结束日期后,单击提交按钮。该页面仍然显示相同的内容,尽管它已如下所示进行了更改:
POST参数:(如Firebug中所示)
Parametersapplication/x-www-form-urlencoded
authenticity_token U0golNARia5Jwq9kd2J49OfDMYHxVP/a2H/u5RYGaYQ=
end_date 2014-04-14
start_date 2014-04-01
utf8 ✓
响应HTML代码:(如Firebug中所示)
...
<p>end date: 2014-04-14</p>
...
为什么新内容没有在任何浏览器中显示?
答案 0 :(得分:0)
<强>解决方案:强>
似乎您需要将表单标记的remote:
设置为false
才能禁用Ajax。