我得到的错误是:找不到没有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]
答案 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