【问题标题】:rails seems to delete query params in URL with 'button_to' helper and 'get' methodrails 似乎使用“button_to”助手和“get”方法删除 URL 中的查询参数
【发布时间】:2018-07-06 12:52:03
【问题描述】:

我有一个显示在视图中的项目列表,每个项目都有一个“删除”按钮。当按下按钮时,我想在 url 查询中使用 delete_id 参数调用同一页面。我的按钮如下所示:

 =button_to t("settings.saved_searches.delete_button"), saved_searches_person_settings_path(:delete_id => saved_search.id), {method: :get ,class:"button delete_search_button", confirm: t("settings.saved_searches.confirm_delete",search_name:saved_search.name)}

它似乎产生了我想要的:

<form class="button_to" method="get" action="/fr/liteultom/settings/saved_searches?delete_id=5">
  <input class="button delete_search_button" confirm="Êtes-vous certain de vouloir supprimer la recherche &quot;test jamais&quot;" type="submit" value="Delete">
</form>

但是当我按下它时,它会将我送回路径 /fr/liteultom/settings/saved_searches? ,没有 delete_id 参数。

编辑:当我使用“button_to”帮助程序中的一些参数调用我的主页时,我的行为相同。

我错过了什么?

编辑 2: 这是我单击此按钮时的服务器日志示例:

<form class="button_to" method="get" action="/fr/homepage?price_max=9271&amp;price_min=0&amp;update_frequency=weekly">
  <input class="button run_search_button" type="submit" value="Lancer">
</form>

而不是登陆:

/fr/homepage?price_max=9271&amp;price_min=0&amp;update_frequency=weekly

我登陆:/fr/homepage?

日志:

16:08:03 rails.1               | 127.0.0.1 - - [06/Jul/2018:16:07:54 CEST] "GET /fr/homepage? HTTP/1.1" 200 15015
16:08:03 rails.1               | http://my.server.me:5000/fr/liteultom/settings/saved_searches -> /fr/homepage?

【问题讨论】:

  • 可以添加服务器日志吗?
  • 更新了我得到的两行服务器日志。由于这是在 sharetribe 中,因此“DEBUG”日志级别非常冗长,因此我将其保留为 INFO。但 DEBUG 级别似乎没有提供更多洞察力,只记录了 DB 调用。

标签: ruby-on-rails ruby haml


【解决方案1】:

我建议你在 button_to 的末尾添加 params: { } 在包含 http_options 的大括号内,它将生成包含值的 hidden_field

 params: { :delete_id =&gt; saved_search.id }

【讨论】:

  • 好吧,这行得通,谢谢!但是该死的,如果我能解释为什么修改路径,我也会喜欢的。无论如何,谢谢。
  • @Tom 它可能不是 Rails 的东西,而是浏览器/HTML/HTTP 的东西。浏览器通过生成 HTTP POST 请求来响应表单元素的“提交”事件。可以使用method="get" 配置表单来代替发送 HTTP GET。 HTTP GET 请求没有正文,因此它存储参数的唯一位置是 URL 的查询字符串。但是浏览器习惯于在表单中使用输入来开发请求的参数列表。在表单上同时定义输入和查询字符串意味着两个(可能相互冲突的)信息源。浏览器丢弃查询字符串并使用输入
  • 哦。这似乎是有道理的。谢谢你的解释!
【解决方案2】:

我想添加一个建议,以防这可能对其他人有所帮助,上述答案确实帮助我更接近解决我的问题,但并不完全。

我需要通过提交按钮将 id 作为参数发送,所以我将参数添加到我的控制器,然后在上方添加了一个隐藏字段。

将此添加到您的表单内和按钮上方。

= f.hidden_field :params, value: params.id

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-21
    • 2012-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-06
    • 2017-05-31
    • 1970-01-01
    相关资源
    最近更新 更多