Rails的link_to发送的是GET请求而不是POST请求

5

我有一些链接,想要发送POST请求,但它们正在发送get请求。

<p class="tags">
  <% tags.keys.each do |key| %>
    <% if tags[key] == 1 %>
      <%= link_to by_tag_media_path(:tag => key), :remote => true, :method => :post do %>
        <span class="font-18"><%= key %></span>
      <% end %>
    <% elsif tags[key] == 2 %>
      <%= link_to by_tag_media_path(:tag => key), :remote => true, :method => :post do %>
        <span class="font-24"><%= key %></span>
      <% end %>
    <% elsif tags[key] == 3 %>
      <%= link_to by_tag_media_path(:tag => key), :remote => true, :method => :post do %>
        <span class="font-36"><%= key %></span>
      <% end %>
    <% end %>
  <% end %>
</p>

这些链接位于名为_tags.html.erb的局部文件和index.html.erb页面上,局部调用位置有以下js代码:
function apply_filters(load_more){
          var params = "";

          $("a.selected").each(function(i, obj){
            params += $(this).text() + "/"
          });

          $("a.type_class").each(function(i, obj){
            params += $(this).text() + "/";
          });

          if(load_more){
            $.post("/media/filtered", {filters: params, load_more: true});
          } else {
            $.post("/media/filtered", {filters: params});
          }
        }

        $("#filtered_media_path").click(function(){
          apply_filters(true);
        });

当调用此JS代码时,我重新呈现了_tags.html.erb部分,并且链接正常工作(发送POST请求),但是当页面最初呈现时,它们会发送GET请求。两种情况下呈现后的HTML代码都是相同的。
索引页面中的表单部分:
<span id="cards">
    <%= render :partial => "media_cards", :locals => {:media_cards => @media_cards, :tags => @tags, :featured_cards => @featured_cards} %>
</span>

还有 media_cards 部分:

 <div class="card media-card search hide-for-mobile">
    <input type="text" name="search-value" id="search_value"/>

    <span id="tags">
      <%= render :partial => "tags", :locals => {:tags => tags} %>
    </span>
  </div>

by_tags.js.erb:

$("#cards").html("<%= escape_javascript(render :partial => 'media_cards', :locals => {:media_cards => @media_cards, :tags => @tags, :featured_cards => @featured_cards}) %>");

生成的HTML如下所示:
<a href="/media/by_tag?tag=test" data-method="delete" data-remote="true" rel="nofollow">
        <span class="font-36">test</span>
</a>

你能展示routes.rb中定义的资源吗? - Doguita
2个回答

0

0

这里是 link_to 原型的链接

link_to(body, url, html_options = {})

你所做的是传递错误的参数,所以需要更改你的代码

link_to("some text", by_tag_media_path(:tag => key),  :remote => true, :method => :post)

2
我之前尝试了你的语法,但结果相同。我不知道我的代码哪里有问题。你可以使用link_to和块,这就是我在这里做的,链接在js代码被调用并且局部重新渲染后起作用,链接的代码相同,在某些情况下它有效,在其他情况下则无效。 - maki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接