2

这里的其他解决方案不起作用,所以我发布了一个新问题。我正在使用acts_as_votable 对链接进行上下投票,但是当我尝试实际投票时,我得到了错误:

No route matches [GET] "/links/1/like"

这就是我的看法:

<%= link_to like_link_path(link), method: :put, class: "btn btn-default btn-sm" do %>
        <span class="glyphicon glyphicon-chevron-up"></span>
        Upvote
        <%= link.get_upvotes.size %>
      <% end %>
      <%= link_to dislike_link_path(link), method: :put, class: "btn btn-default btn-sm" do %>
        <span class="glyphicon glyphicon-chevron-down">
        Downvote
        <%= link.get_downvotes.size %>
      <% end %>

这就是我的路线的样子:

  resources :links do
    member do
      put "like", to: "links#upvote"
      put "dislike", to: "links#downvote"
    end
  end

我看到我的客户正在尝试访问 get 方法,但我method: :put在 index.html.erb 文件中显式调用。

你知道为什么它试图访问 get 以及我如何覆盖它吗?

4

2 回答 2

2

这个问题几乎总是与 JQuery 有关,尽管在这种情况下我不知道为什么。

你甚至可以在这里看到它:

请注意,如果用户禁用了 JavaScript,则请求将回退到使用 GET

我会首先检查你的应用程序中是否有 JQuery,然后它会被调用。如果它没有加载,那么最好的做法是查看为什么没有调用 JQuery(它要么是因为它不会被引用,要么你会遇到阻止它加载的错误)。

您的代码实际上看起来有效,所以我不得不说 JQuery 可能是这里的问题。


你可以完善你的路线等:

#config/routes.rb
resources :links do
   match "vote", action: :vote, via: [:put,:delete], on: :member
end

这会将两种类型的请求都发送到一个名为 的操作vote,然后您可以将其拆分如下:

#app/controllers/links_controller.rb
class LinksController < ApplicationController
   def vote
      if request.put?
         # Code to vote
      elsif request.delete?
         # Code to downvote
      end
      # Redirect back
   end
end

更高效(只调用一个动作等)

于 2015-12-16T19:45:47.807 回答
1

事实证明,答案与 JQuery 有关。我遇到了一个Uncaught ReferenceError: jQuery is not defined错误,所以我所做的就是在我的 application.html.erb 文件中直接包含 JQuery。

你必须把它放在所有其他脚本之前。

<script src="http://code.jquery.com/jquery-1.11.3.min.js"></script>

之后,投票开始工作

于 2015-12-16T22:55:29.770 回答