【问题标题】:Why form_tag parameters are showed in my URL?为什么我的 URL 中会显示 form_tag 参数?
【发布时间】:2014-07-08 02:33:39
【问题描述】:

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

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

有人知道如何删除我的网址中的?utf8=✓&amp;button=?

非常感谢!


编辑:

为了解决这个问题,我打算使用link_to。

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

【问题讨论】:

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


    【解决方案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。

    【讨论】:

      【解决方案2】:

      获取

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

      底线:

      • Get 请求在 URL 中附加参数
      • Post 请求在后台发送参数


      修复

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

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

      <%= form_tag user_path(current_user) do %>
      

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

      如果您给我评论,我将能更好地帮助您找到更好的解决方案!

      【讨论】:

        【解决方案3】:

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

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

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

        • 在所有表单上指定接受字符集。所有最近的浏览器,以及 IE5+,将使用指定的编码 用于表单参数
        • 不幸的是,IE5+ 不会查看接受字符集,除非至少有一个 表单值中的字符不是 在页面的字符集中。由于 用户可以覆盖默认值
          字符集(Rails 设置为 UTF-8), 我们提供一个隐藏的输入,包含 一个 unicode 字符,强制 IE 查看接受字符集。
        • 现在绝大多数 Web 输入都是 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> 
        

        【讨论】:

        • 但是,我真的需要在 URL 中显示 utf8 参数吗?
        • 帮助IE真正使用utf-8。
        • 还有其他方法吗?因为 URL 变得丑陋。我只想显示 /user/:id
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-10-08
        • 2021-12-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多