我在根页面上有一个表格,该表格由flights#index处理,位于根目录。我希望该表单将GET请求提交到同一页面,找到合适的航班并显示它们。不幸的是,这些参数不会持久。
对于这个问题,我创建了一个新的rails项目,并尝试重新创建该问题:
rails new get-req-test
rails g controller Flights
并且仅在下面修改这些文件:
config / routes.rb
Rails.application.routes.draw do
root "flights#index"
end
app / controllers / flights_controller.rb
class FlightsController < ApplicationController
def index
end
end
app / views / flights / index.html.erb
<%= form_with(method: "get") do %>
<%= text_field_tag :text1 %>
<%= text_field_tag :text2 %>
<%= text_field_tag :text3 %>
<%= submit_tag %>
<% end %>
<% params.each do |k,v| %>
<p><%= "#{k}: #{v}" %></p>
<% end %>
当我使用嵌入在 index.html.erb 文件末尾的调试器时,我会收到所有提交的参数,但这些参数不会显示在网站上,仅显示控制器:航班,操作:索引
通过在相应的文本框中提交abc
def
ghi
,我在服务器上收到以下输出:
Started GET "/?utf8=%E2%9C%93&text1=abc&text2=def&text3=ghi&commit=Save%20changes" for 127.0.0.1 at 2019-08-21 21:01:55 +0300
Processing by FlightsController#index as JS
Parameters: {"utf8"=>"✓", "text1"=>"abc", "text2"=>"def", "text3"=>"ghi", "commit"=>"Save changes"}
Rendering flights/index.html.erb within layouts/application
Rendered flights/index.html.erb within layouts/application (0.9ms)
Completed 200 OK in 17ms (Views: 13.0ms | ActiveRecord: 0.0ms)
页面本身没有改变。
答案 0 :(得分:1)
我认为问题是remote: true
方法默认添加的form_with
。
尝试使用<%= form_with method: "get", local: true do %>
参考: https://medium.com/@tinchorb/form-with-building-html-forms-in-rails-5-1-f30bd60ef52d