POST请求后页面不显示新数据

时间:2014-04-09 11:46:44

标签: ruby-on-rails ruby-on-rails-3.2 redmine-plugins

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>
...

为什么新内容没有在任何浏览器中显示?

1 个答案:

答案 0 :(得分:0)

<强>解决方案:

似乎您需要将表单标记的remote:设置为false才能禁用Ajax。