为什么form_tag参数显示在我的URL中?

时间:2014-07-08 02:33:40

标签: ruby-on-rails url ruby-on-rails-4 utf-8 parameters

我遇到以下问题。 我有一个按钮,可以将用户发送到/ user /:id,并且运行良好,但是当我在网址中收到点击时

http://0.0.0.0:3000/users/1?utf8=✓&button=

我不想展示?utf8=✓&button=

form_tag正在发送

  Processing by UsersController#show as HTML
  Parameters: {"utf8"=>"✓", "button"=>"", "id"=>"1"}

我的按钮是:

<%= form_tag user_path(current_user), method: :get do %>
  <%= button_tag type: 'submit', class: "btn btn-success" do %>
    <i class="glyphicon glyphicon-user white"></i> <%= current_user.name %>
  <% end %>
<% end %>

我的路线:

     user GET    /users/:id(.:format)                        users#show
          PATCH  /users/:id(.:format)                        users#update
          PUT    /users/:id(.:format)                        users#update
          DELETE /users/:id(.:format)                        users#destroy

有人知道如何删除我的网址{1}}

非常感谢!


编辑:

要解决这个问题,我将使用link_to。

?utf8=✓&button=

3 个答案:

答案 0 :(得分:2)

获取

原因是因为you're using the :get method

底线:

  
      
  • Get请求在网址
  • 中添加params   
  • Post请求在幕后发送参数
  •   

enter image description here


<强>修正

要解决此问题,您需要从表单中删除method: :get

这将允许您的表单发送post请求,该请求将隐藏参数:

<%= form_tag user_path(current_user) do %>

然而,更深层次的问题是为什么您发送带有表单的get请求?可以使用它(因为您正在为表单加载正确的资源),但也许您最好使用link_to或类似的?

如果你给我一个评论,我会更好地帮助找到更好的解决方案!

答案 1 :(得分:1)

这是为了支持Internet Explorer 5并鼓励它使用UTF-8作为其表单。

看到的提交消息here详细说明如下:

  

修复了几个已知的网络编码问题:

     
      
  • 在所有表单上指定accept-charset。所有最近的浏览器,以及   IE5 +,将使用指定的编码   表单参数
  •   
  • 不幸的是,IE5 +除非至少有一个,否则不会看看accept-charset   形式值中的字符不是   在页面的字符集中。自从   用户可以覆盖默认的
      charset(Rails设置为UTF-8),   我们提供一个隐藏的输入包含   一个unicode字符,迫使IE进入   看看accept-charset。
  •   
  • 现在绝大多数网络输入都是UTF-8,我们设置了入站   参数为UTF-8。这将   消除许多不相容的情况   ASCII-8BIT和
    之间的编码   UTF-8。
  •   
  • 你可以放心地忽略params [:_ snowman]
  •   

简而言之,您可以安全地忽略此参数。

但是,我不确定为什么我们支持像Internet Explorer 5这样的旧技术。如果你问我,这似乎是一个非Ruby on Rails决定。

要真正删除雪人,请尝试:

避免使用form_tag,它可以工作:

<form action="<%= your_path %>" method="get" >
  <%= text_field_tag 'any_field' %>
  <%= submit_tag "submit name", :name => nil%>
</form> 

答案 2 :(得分:1)

由于您在表单中没有任何输入,因此实际上不需要表单。只需将其更改为link_to的锚标记,即可完成设置。

<%= link_to user_path(current_user), :class => "btn btn-success" do %>
  <i class="glyphicon glyphicon-user white"></i> <%= current_user.name %>
<% end %>

这看起来与提交按钮完全相同。 URL只是/ user /:id。