没有路线匹配[GET]" / links / 1 / like" - Ruby On Rails

时间:2015-02-18 09:50:04

标签: html ruby-on-rails ruby

你好我正在做https://www.youtube.com/watch?v=7-1HCWbu7iU和我最多50.07分钟。我是红宝石的新手。已经学习了3个星期。

我刚装载Acts As Votable Gem。根据说明加载它。我能够使用ruby控制台添加一个upvote。所以它似乎有效。

然而

当我点击upvote 时出现此错误没有路线匹配[GET]“/ links / 1 / like”

您可以在此链接http://postimg.org/delete/8cmbm60j6/

中查看该图片

以下是我的观点>链接> index.html.erb

<% @links.each do |link| %>
  <div class="link row clearfix">
    <h2>
      <%= link_to link.title, link %><br>
      <small class="author">Submitted <%= time_ago_in_words(link.created_at) %> by <%= link.user.email %></small>
    </h2>
<div class="btn-group">
      <a class="btn btn-default btn-sm" href="<%= link.url %>">Visit Link</a>
      <%= 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 %>
    </div>
  </div>
<% end %>

以下是我的routes.rb

Rails.application.routes.draw do
  resources :comments

  devise_for :users

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

任何人都知道问题是什么?谷歌没有帮助......谢谢!

5 个答案:

答案 0 :(得分:1)

在你的路线中你已经定义了

put "like",    to: "links#upvote"

这意味着动词必须是&#39; PUT&#39;

你正在打击&#39; GET&#39; /links/1/like。 您需要将get请求更改为put请求

您的路线为[PUT] "/links/1/like"而不是[GET] "/links/1/like"

每个链接都是get请求,您需要ajax请求此

答案 1 :(得分:0)

将路径中的路径设为get或post而不是put

例如

resources :links do member do get 'like' get 'dislike' end

您收到错误是因为您尚未在路线文件中指定路线。

答案 2 :(得分:0)

@ joeyk16,只是尝试将:method => :put选项更改为:data => {:method => :put}并在app.js中包含jquery_ujs(如果还没有)。

所以链接看起来像是:

link_to dislike_link_path(link), :data => {:method => :put}, :class => "btn btn-default btn-sm"

答案 3 :(得分:0)

我遇到了这个问题并以这种方式解决了这个问题:

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

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

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

之后,投票开始起作用

答案 4 :(得分:0)

对于我的路线,我删除了member do位:

resources :links do
    #member do
      put "Like",    to: "links#upvote"
      put "Dislike", to: "links#downvote"
    #end
end 

在运行rake路由后,我意识到路径名也已更改。这是我的 app / views / links / index.html.erb

<% @links.each do |link| %>
 <div class="link row clearfix">
    <h2>
        <%= link_to link.title, link %><br />
        <small class="author">Submitted <%= time_ago_in_words(link.created_at) %> by <%= link.user.email %></small>
    </h2>

    <div class="btn-group">
        <a class="btn btn-default btn-sm" href="<%= link.url %>">Visit Link</a>
        <%= link_to link_Like_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 link_Dislike_path(link), method: :put, class: "btn btn-default btn-sm" do %>
          <span class="glyphicon glyphicon-chevron-down">
            Downvote
            <%= link.get_downvotes.size %>
        <% end %>
    </div>
 </div>
<% end %>

显然现在是link_Like_path(link)&amp; link_Dislike_path(link)

希望这有帮助