没有路由匹配 [GET]“/links/1/like”和 acts_as_votable

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

我正在尝试实现 acts_as_votable gem,如本教程中所示
https://www.youtube.com/watch?v=7-1HCWbu7iU

似乎一切正常,除了当我点击赞成票或反对票时,我得到这个错误:

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

这是点赞/反对功能的代码

<span class="upvote">
          <%= link_to like_link_path(link), method: :put, class: "upvote-image" do %>
          <% end %>
</span>

这是 routes.rb 文件:

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

    resources :comments
  end

以下是 links_controller

中的赞成票和反对票操作
def upvote
    @link = Link.find(params[:id])
    @link.upvote_by current_user
    redirect_to :back
  end

  def downvote
    @link = Link.find(params[:id])
    @link.downvote_by current_user
    redirect_to :back
  end

知道如何解决这个问题吗?

看起来问题出在您的 link 有一个 GET 方法,而不是 PUT:

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

我只能推测你的link_to代码写错了:

<span class="upvote">
   <%= link_to like_link_path(link), method: :put, class: "upvote-image" %>
</span>

你的其他代码看起来不错。如果您对此进行测试,最好的办法是在您的问题中为 link 显示纯 HTML - 这将使我们能够查看它是否被正确呈现。

我找到了这个问题的答案,我将其张贴在这里以防其他人遇到同样的问题。

我正在开发 Windows。我在使用 javascript 时遇到问题,并在此处遵循此解决方案:

这消除了随处可见的 javascript 相关错误,但这不是解决方案。这只是从我的应用程序中删除了 js。

真正的解决办法在这里:

您需要使用与 Windows 兼容的正确版本的咖啡脚本。

总结一下:

js 文件在我的应用程序中丢失,因此 //= require jquery_ujs 也丢失了,这就是为什么我的所有链接都被称为 GET。

@Rich Peck, 感谢您的帮助。

试试这个

<span class="upvote">
  <%= link_to like_path, method: :put, class: "upvote-image" do %>
  <% end %>
</span>