【问题标题】:rails link_to sends get instead of postrails link_to 发送 get 而不是 post
【发布时间】:2014-03-26 11:50:33
【问题描述】:

我有一些链接想要发送 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中显示定义的资源吗?

标签: javascript ruby-on-rails


【解决方案1】:

这里是链接到原型

link_to(body, url, html_options = {})

你正在做的是传递错误的参数 所以改变你的代码

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

【讨论】:

  • 我之前尝试过你的语法,但结果相同,我看不出我的代码中有什么不正确的地方,你可以将 link_to 与我在这里所做的块一起使用,并且链接有效在调用 js 代码并重新渲染部分后,链接的代码是相同的,在一种情况下它可以在其他情况下工作
【解决方案2】:

我建议您阅读此内容。 http://guides.rubyonrails.org/working_with_javascript_in_rails.html 它帮助了我很多次。

【讨论】:

    猜你喜欢
    • 2016-03-12
    • 1970-01-01
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-20
    相关资源
    最近更新 更多