将表单发送到同一页面后,GET请求参数消失

时间:2019-08-21 18:09:24

标签: ruby-on-rails ruby-on-rails-5

我在根页面上有一个表格,该表格由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)

页面本身没有改变。

1 个答案:

答案 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

相关问题