我遇到以下问题。 我有一个按钮,可以将用户发送到/ 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=
答案 0 :(得分:2)
获取强>
原因是因为you're using the :get
method
底线:
- 中添加params
Get
请求在网址Post
请求在幕后发送参数
<强>修正强>
要解决此问题,您需要从表单中删除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。