【问题标题】:No route matches [GET] "/links/1/like" - Ruby On Rails没有路线匹配 [GET] "/links/1/like" - Ruby On Rails
【发布时间】:2016-04-09 02:58:58
【问题描述】:

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

我刚刚加载了 Acts As Votable Gem。按照说明加载它。我能够使用 ruby​​ 控制台添加赞成票。所以它似乎有效。

但是。

当我点击upvote时我收到此错误No route matches [GET] "/links/1/like"

你可以在这个链接http://postimg.org/delete/8cmbm60j6/看到它的图片

以下是我的观点>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 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 %>

下面是我的路线.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"

有人知道问题出在哪里吗? Google 没有帮助...谢谢!

【问题讨论】:

    标签: html ruby-on-rails ruby


    【解决方案1】:

    在您定义的路线中

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

    这意味着动词必须是'PUT'

    您正在点击“GET”/links/1/like。 您需要从 get 请求更改为 put 请求

    你的路由是[PUT] "/links/1/like" 而不是[GET] "/links/1/like"

    每个链接都是get请求,你需要ajax这个请求

    【讨论】:

    • 你是冠军!今晚睡前给自己打个高分。
    • 只是一个快速的。当我单击“退出”时,我得到相同的错误没有路由匹配 [GET]“/users/sign_out”我在哪里修复该错误?我看不到任何我应该改变的东西,而不是 put....
    • 转到config/initializers/devise.rb。找到config.sign_out_via = :delete,如果没有则放config.sign_out_via = :get,或者如果存在则将:delete更改为:get
    • 它就在那里。所以我改为 config.sign_out_via = :get 我仍然得到同样的错误。奇怪..
    • 重启rails服务器,因为你已经改变了initializers文件。添加 gem 时也会重新启动
    【解决方案2】:

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

    例如

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

    您收到错误是因为您没有在路由文件中指定路由。

    【讨论】:

    • 如果有人不小心打开/links/1/like然后他会得到upvote,这不是上帝的做法。
    • GET 应该只用于不变的请求。即,如果您要求它 1000 次,什么都不会改变。一般来说,爬虫会跟随 GET 链接,你最终可能会得到很多虚假的赞成/反对票
    【解决方案3】:

    @joeyk16,只需尝试将 :method =&gt; :put 选项更改为 :data =&gt; {:method =&gt; :put} 并将 jquery_ujs 包含在您的 application.js 中(如果您还没有的话)。

    所以链接看起来像:

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

    【讨论】:

      【解决方案4】:

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

      原来答案与JQuery有关。我收到了 Uncaught ReferenceError: jQuery is not defined 错误,所以我所做的就是在我的 application.html.erb 文件中直接包含 JQuery。

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

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

      之后,投票开始工作

      【讨论】:

        【解决方案5】:

        对于我的路线,我删除了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) & link_Dislike_path(link)

        希望对你有帮助

        【讨论】:

          猜你喜欢
          • 2015-12-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-10-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多