我知道这是一个典型的问题。但我只是在rails中尝试路由,我得到了这个错误:
uninitialized constant UsersController
我不知道问题出在哪里。 我的应用程序的简历是一个简单的图书馆应用程序,用户可以在这里预订书籍并查看他们预订的书籍。 这是我的routes.rb
Brickstest2::Application.routes.draw do
resources :books
root "pages#home"
get "home", to: "pages#home", as: "home"
get "inside", to: "pages#inside", as: "inside"
devise_for :users
namespace :admin do
root "base#index"
resources :users
end
resources :books do
get :book_a_book, :as => "reserve"
end
resources :users do
get :booked_books, :as => "reserved", :on => :member
end
end
实际上当我收到路线时,我得到:
reserved_user_path
GET /users/:id/booked_books(.:format) users#booked_books
在users_controllers.rb中我有:
def booked_books
@user = User.first(params[:user_id])
#return unless @user == current_user
@books = Books.where(:user = @user)
end
booking_books的链接:
<%= link_to "My books", user_reserved_path(:user_id => current_user.id)%>
最后我的用户/ booked_books.html.erb:
<h1>My books</h1>
<%= @books.each do |book|%>
<p><%= book.name %>
<% end %>
提前致谢。
答案 0 :(得分:1)
您是否已为User
<{1}}子类的ApplicationController
资源声明了一个控制器?
# app/controllers/users_controller.rb
class UsersController < ApplicationController
请注意,User
模型的复数资源路由的精确命名约定为UsersController
(请注意s
)。我猜你已经命名了你的控制器类UserController
,这对你的用例不起作用。
<强>更新强>:
由于您已声明了控制器命名空间,因此您需要声明控制器类,如下所示:
# app/controllers/admin/users_controller.rb
class Admin::UsersController < ApplicationController
这应解决涉及命名空间的任何uninitialized constant UsersController
错误。