控制器&路由错误 - 找不到没有ID的用户

时间:2013-08-03 17:44:56

标签: ruby-on-rails ruby

我得到的错误是:找不到没有ID的用户

我有效地尝试在用户登录时在其主页上列出用户的课程。但是我无法让@用户在控制器中正常工作,我相信它的路由错误但不确定

静态页面控制器

class StaticPagesController < ApplicationController
 def home
  @user = User.find(params[:id]) <<<here is the problem
  @courses = @user.courses
 end
end

查看部分

<div class="row">
 <div class="span8">
   <% if @courses.any? %>
  <ul class="courses">
    <%- @courses.each do |course| %>
    <%= link_to course.title, course_path(course) %>
    <%- end%>
  </ul>
   <% end %>
 </div>
 </div>

的routes.rb

Serenity::Application.routes.draw do

root to: 'static_pages#home' 

# match '/signup', to: 'users#new'
# match '/signin', to: 'sessions#new'
# match '/signout', to: 'sessions#destroy', via: :delete
match '/help', to: 'static_pages#help'
match '/about', to: 'static_pages#about'
match '/contact', to: 'static_pages#contact'

devise_for :admin_users, ActiveAdmin::Devise.config
ActiveAdmin.routes(self)

devise_for :users
ActiveAdmin.routes(self)

resources :users do
  member do
    get :courses
  end
end
resources :courses
resources :assignments, only: [:create, :destroy]

3 个答案:

答案 0 :(得分:1)

您的根页面已转到static_pages#home,但在这种情况下没有id参数,因此params[:id]正在返回nil,这就是正在发生的事情传递给find。假设您想要访问当前登录用户的id,您需要以其他方式获取它,如http://ruby.railstutorial.org/book/ruby-on-rails-tutorial中所述。在该教程中搜索current_user

答案 1 :(得分:1)

您的主页上没有params。使用Devise中的内置current_user方法。

答案 2 :(得分:0)

查看您的路线,我可以看到您正在使用Devise进行身份验证。这意味着您很可能已经有一个名为current_user的帮助程序,为您提供当前登录的User

我猜你正试图在主页上显示当前用户的所有课程。所以改变你的控制器动作如下:

class StaticPagesController < ApplicationController
 def home
  @courses = current_user.courses
 end
end