【问题标题】:Can I use Rails link_to to make a POST instead of a button_to?我可以使用 Rails link_to 来进行 POST 而不是 button_to 吗?
【发布时间】:2015-09-07 04:43:32
【问题描述】:

我正在使用 inline_svg gem 为我的图标渲染 SVG。 我的视图代码如下所示:

<div class="icon">
  <%= link_to inline_svg(listing.favorite_icon, class: "svg"), favorite_listing_path(id: listing.id), method: :post  %>
</div>

我有一个心形图标,当用户点击它时,POST 应该被添加到 Rails favorite 路由。我在 Postman 中对此进行了测试,它确实在我的视野之外正常工作。但是,在我看来,点击收藏会生成一个GET

我知道我可以使用button_to 代替link_to,然后POST 会发生..但是...button_to 不能正确渲染我的SVG(见附图)。

所以我可以采取两种方式之一...有人可以帮我将我的链接指向POST吗?或者有人可以告诉我为什么我的 SVG 不能用 button_to 正确渲染吗?

link_to:

button_to:

更新:这是我尝试过的一些事情...单击仍然会导致GET另外,如果这有什么不同的话,我正在使用 Rails 4.2。

<%= link_to "hi", controller: "listings", action: "favorite", id: listing.id, method: :post  %>

<%= link_to(inline_svg(listing.favorite_icon, class: "svg"), controller: "listings", action: "favorite", id: listing.id, method: :post)  %>
<%= link_to(favorite_listing_path(id: listing.id), method: :post)  do %>
  <div class="icon">
    <%= inline_svg(listing.favorite_icon, class: "svg") %>
  </div>
<% end %>

【问题讨论】:

  • 我不知道这是否有帮助,但试试这个:&lt;%= link_to(inline_svg(listing.favorite_icon, class: "svg"), favorite_listing_path(id: listing.id), method: :post) %&gt; 或者您可以使用link_to 块使用do end
  • @Deep 将他们指向documentation,您可以将该评论转换为一个体面的答案。
  • button_to 的内容而言,您可能需要调用.html_safe 来告诉Rails 您的SVG 字符串不需要进行HTML 转义。
  • 我认为最好的方法是使用link_to,并在其上应用按钮css。

标签: ruby-on-rails ruby svg


【解决方案1】:

我想通了。当我开始 Rails 项目时,我剥离了 Rails-Jquery。我没有意识到{ method: POST } 使用了这个。

【讨论】:

    【解决方案2】:

    这篇文章已经很老了,但我想评论一下在看到它之后最终对我有用的东西。

    <%= link_to story_favourite_path(@story), method: :post do %>
        <%= render inline: Rails.root.join('public/bookmark-regular.svg').read %>
    <% end %>
    

    【讨论】:

      【解决方案3】:

      对于动词 :post、:delete、:patch 和 :put.,如果用户禁用了 JavaScript,请求将回退到使用 GET。所以再增加一个选项。 remote: true 结束您的第一个问题。

      <div class="icon">
        <%= link_to inline_svg(listing.favorite_icon, class: "svg"), favorite_listing_path(id: listing.id), method: :post, remote: true  %>
      </div>
      

      【讨论】:

      • 感谢您的帮助。这没有用。它仍在执行GET。另外,我尝试将 link_to 之后的所有内容都包装在括号中,但没有成功。
      猜你喜欢
      • 2016-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多