Я борюсь с тем, что я считаю очень простой ошибкой, и все же у меня нет опыта Rails, чтобы определить, где эта ошибка.
У меня есть следующая форма:
<%= 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 %>
В моем файле config / rout.rb у меня есть следующая строка:
get '/bills/viewer', to: 'bills#show'
Идея состоит в том, что я хочу, чтобы форма передавала предоставленную информацию в действие "show" в моем файле bills_controller.rb, который я приведу ниже ...
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!"
... и затем для перенаправления пользователя в соответствующий файл show.html.erb, который я приведу ниже ...
<% 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..." %>
Две строки "put" находятся там для моей собственной цели отладки. Тот, что в методе show, ведет себя как ожидалось, и моя консоль отображает «Вызван для показа!». Другая строка ставит "RENDERED ..." не отображается. Более того, процесс завершается до 200 ОК.
Я включаю вывод своей консоли после нажатия кнопки «Отправить» ниже ...
Started GET "/bills/viewer?utf8=%E2%9C%93&congress=112&bill_type=hr&bill_number=1027&commit=Submit" for 127.0.0.1 at 2018-07-05 15:05:51 -0700
Processing by BillsController#show as JS
Parameters: {"utf8"=>"✓", "congress"=>"112", "bill_type"=>"hr", "bill_number"=>"1027", "commit"=>"Submit"}
Unpermitted parameters: :utf8, :commit
Unpermitted parameters: :utf8, :commit
Unpermitted parameters: :utf8, :commit
Bill Load (0.1ms) SELECT "bills".* FROM "bills" WHERE (congress = '112' AND bill_type = 'hr' AND bill_number = '1027') LIMIT ? [["LIMIT", 1]]
Unpermitted parameters: :utf8, :commit
Called to show!
Completed 200 OK in 2980ms (Views: 0.6ms | ActiveRecord: 0.7ms)
Но если перенаправить форму в show.html.erb, вывод консоли должен возвращать 3XX, нет?
Мое (явно ошибочное) понимание: когда я вызываю действие show в моем bills_controller, веб-сайт должен автоматически перенаправлять на страницу views / bills / show.html.erb. Почему это не так, и как я могу идиоматически корректно редактировать мой код, чтобы произошло желаемое перенаправление?
Помощь очень ценится.