form_with在需要时不会重定向

时间:2018-07-05 22:11:04

标签: ruby-on-rails forms

我正在努力解决我认为是一个非常简单的错误,但是我没有Rails的复杂性来检测该错误在哪里。

我的格式如下:

Get-Help Set-ItemProperty -Full 

在我的config / routes.rb文件中,有以下一行:

<%= form_with(url: '/bills/viewer', method: :get) do |f| %>

  <%= f.label :congress, 'Congress (i.e. 112)' %>
  <%= f.number_field :congress, class: 'form-control' %>

  <%= f.label :bill_type, 'Bill type' %>
  <%= f.radio_button :bill_type, 'hr' %><%= ' House of Representatives' %>
  <%= f.radio_button :bill_type, 's' %><%= ' Senate' %>
  <%= f.radio_button :bill_type, 'hjres' %> <%= 'House Joint Resolution' %>
  <%= f.radio_button :bill_type, 'sjres' %><%= ' Senate Joint Resolution' %>
  <%= f.radio_button :bill_type, 'hconres' %><%= ' House Concurrent Resolution' %>
  <%= f.radio_button :bill_type, 'sconres' %><%= ' Senate Concurrent Resolution' %>
  <%= f.radio_button :bill_type, 'hres' %><%= ' House Resolution' %>
  <%= f.radio_button :bill_type, 'sres' %><%= ' Senate Resolution' %>

  <%= f.label :bill_number, 'Bill number' %>
  <%= f.number_field :bill_number, class: 'form-control' %>

  <%= f.submit "Submit", class: 'form-control' %>

<% end %>

我的想法是我希望表单将提交的信息转移到我的bills_controller.rb文件中的“ show”操作中,该文件在下面给出...

get '/bills/viewer', to: 'bills#show'

...然后将用户重定向到相应的show.html.erb文件,该文件在下面提供...

def show
  @bill = Bill.where("congress = ? AND bill_type = ? AND bill_number = ?", bill_params[:congress], bill_params[:bill_type], bill_params[:bill_number]).take
  if @bill.nil?
    create
  end
  @bill_xml = RestClient.get(bill_params[:bill_link])
  render :xml => @bill_xml
  puts "Called to show!"

其中两个“ puts”行用于我自己的调试目的。 show方法中的一个行为正常,并且我的控制台显示“ Called to show!”。另一个放置线“ RENDERED ...”不显示。此外,该过程完成到200 OK。

点击下面的“提交”,我将控制台的输出包括在内...

<% provide(:title, "#{ @bill[:congress] } #{ @bill[:bill_type].upcase } #{ @bill[:bill_number] } | ") %>
<h1><%= "#{ @bill[:congress] } #{ @bill[:bill_type].upcase } #{ @bill[:bill_number] }" %></h1>

<div class="row">
  <div class="col-md-6 col-md-offset-3">
    <%= puts @bill_xml %>
    <%= render @bill_xml %>
  </div>
</div>

<% puts "RENDERED..." %>

但是,如果要将表单重定向到show.html.erb,则控制台输出应返回3XX,不是吗?

我的理解(显然是错误的)是,当我在bills_controller中调用show操作时,网站应该自动重定向到views / bills / show.html.erb页面。为什么不是这种情况,如何习惯地正确编辑我的代码,以便进行所需的重定向?

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

通过在f​​orm_with标记中设置local:true解决了该错误。但是,我不清楚为什么

答案 1 :(得分:0)

这来自Rails指南:

“默认情况下,form_with使用Ajax提交表单,从而跳过整个页面的重定向。为了使本指南更易于理解,我们暂时使用local:true禁用它。”