【问题标题】:No route matches {:controller=>"queue_videos"} even I used the path from rake routes即使我使用了来自 rake 路由的路径,也没有路由匹配 {:controller=>"queue_videos"}
【发布时间】:2013-05-17 16:49:43
【问题描述】:

我被困住了。我需要你的帮助,拜托。 即使我使用了rake routes验证的路径

user_queue_videos GET    /users/:user_id/queue_videos(.:format)          queue_videos#index

我收到以下错误:

ActionController::RoutingError at /videos
No route matches {:controller=>"queue_videos"}

视图中的链接

%li= link_to "My Queue", user_queue_videos_path

routes.rb

  resources :users, only: [:new, :create] do
    resources :queue_videos
  end

queue_videos_controller

  class QueueVideosController < ApplicationController
    before_filter :require_user

    def index
      @videos = current_user.my_queued_videos
    end

  end

我尝试使用member routes但它不起作用,所以我拿走了但它仍然没有呈现索引模板...

第二次尝试:当我放入时

  class QueueVideosController < ApplicationController
    before_filter :require_user

    def index
      @user.id = current_user.id #current_user is defined in ApplicationController
      @videos = current_user.my_queued_videos
    end

  end

在视图中

  %li= link_to "My Queue", user_queue_videos_path(@user.id)

它给了我以下错误:

RuntimeError at /videos
Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id

第三次尝试:然后我尝试了以下操作: 可见

  %li= link_to "My Queue", user_queue_videos_path(current_user.id)

它给了我以下错误:

NoMethodError at /users/1/queue_videos

undefined method `id=' for nil:NilClass

注意: 在应用控制器中

  class ApplicationController < ActionController::Base
    protect_from_forgery

    helper_method :logged_in?, :current_user

    def current_user
      @current_user ||= User.find(session[:user_id]) if session[:user_id]
    end

    def logged_in?
      !!current_user
    end

    def require_user
      unless logged_in?
        flash[:error] = "You don't have permission to do this"
        redirect_to root_path
      end
    end
  end

【问题讨论】:

    标签: ruby-on-rails resources controller routes


    【解决方案1】:

    根据您的rake routes 输出和routes.rb,您需要传递user_id,因为它是用户的成员。例如:

    %li= link_to "My Queue", user_queue_videos_path(current_user.id)
    

    希望这会有所帮助!

    【讨论】:

    • 哦,我也试过了,但它也给了我错误:Called id for nil,这会错误地是 4 -- 如果你真的想要 nil 的 id,请使用 object_id
    • 那是因为@user 没有定义。你需要定义它。
    • @user.id 只是一个例子。我现在不知道如何在您的视图中获取用户 ID。
    • 试用:user_queue_videos_path(current_user.id)
    • 确保您的 current_user 不是 Nil。可能你还没有登录。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-02
    • 2013-03-21
    • 1970-01-01
    • 1970-01-01
    • 2015-09-04
    • 1970-01-01
    • 2011-05-06
    相关资源
    最近更新 更多