没有路线匹配 [GET] "/links/1/like" acts_as_votable
No route matches [GET] "/links/1/like" acts_as_votable
此处的其他解决方案均无效,因此我发布了一个新问题。我正在使用 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 以及我如何覆盖它吗?
这个问题几乎总是与 JQuery 有关,尽管在这种情况下我不确定原因。
你甚至可以看到它here:
Note that if the user has JavaScript disabled, the request will fall back to using 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
更 DRY 更高效(仅调用单个操作等)
原来答案与JQuery有关。我遇到了 Uncaught ReferenceError: jQuery is not defined
错误,所以我所做的就是将 JQuery 直接包含在我的 application.html.erb 文件中。
你必须把它放在所有其他脚本之前。
<script src="http://code.jquery.com/jquery-1.11.3.min.js"></script>
之后,投票开始工作
此处的其他解决方案均无效,因此我发布了一个新问题。我正在使用 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 以及我如何覆盖它吗?
这个问题几乎总是与 JQuery 有关,尽管在这种情况下我不确定原因。
你甚至可以看到它here:
Note that if the user has JavaScript disabled, the request will fall back to using 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
更 DRY 更高效(仅调用单个操作等)
原来答案与JQuery有关。我遇到了 Uncaught ReferenceError: jQuery is not defined
错误,所以我所做的就是将 JQuery 直接包含在我的 application.html.erb 文件中。
你必须把它放在所有其他脚本之前。
<script src="http://code.jquery.com/jquery-1.11.3.min.js"></script>
之后,投票开始工作