此处的其他解决方案无效,因此我发布了一个新问题。我正在使用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方法,但我在index.html.erb文件中显式调用了method: :put
。
你知道为什么它试图访问get以及如何覆盖它吗?
答案 0 :(得分:2)
这个问题几乎总是与JQuery有关,尽管在这种情况下我不确定原因。
你甚至可以看到它here:
请注意,如果用户禁用了JavaScript,请求将回退到使用GET
我首先会检查你的应用程序中是否有JQuery,然后它被称为okay。如果它没有加载,那么最好的做法就是看看为什么没有调用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
很多DRY并且效率更高(仅调用单个动作等)
答案 1 :(得分: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>
之后,投票开始起作用