SingularI有这个问题。我在路线文件中定义了我的路线:
namespace :admin do
root to: "home#index"
resources :define_user
end
我创建了用户控制器:
class DefineUsersController < ApplicationController
def create
...
end
def destroy
...
end
end
我在视图中创建了新文件夹&#39; define_users&#39;与文件&#39; show.html.haml&#39;。我用link_to称呼它:
=link_to 'User', admin_define_user_path
我得到了上述错误。我想留下单数的名字。感谢所有答案。
答案 0 :(得分:1)
您正在尝试访问没有DefineUser对象的显示路径
= link_to 'User', admin_define_user_path(define_user)
其中define_user是DefineUser类的对象或此对象的id
答案 1 :(得分:1)
首先,如果你想要link_to一些define_user,你必须提供对象或id。这样的事情:admin_define_user_path(@define_user)
。
要显示所有可能的路由,请在控制台中键入rake routes
。
资源也应该是复数形式。
此外,您必须在控制器中提供命名空间。
P.S。
我认为,使用名为DefineUser
的模型是一个非常糟糕的主意。这不是铁路方式。只需使用User
即可。 DefineUser
是方法的好名字,但不是模型。
因此,处理代码的最佳方法是:
的routes.rb
namespace :admin do
root to: "home#index"
resources :users
end
users_controller.rb
class Admin::UsersController < ApplicationController
def index
...
end
end
视图
= link_to 'Users', admin_users_path # for index
= link_to 'User', admin_user_path(@user) # for one user
按命名空间分隔控制器是个好主意。例如,您可以拥有下一个结构:
application_controller.rb
admin #folder
L base_controller.rb
L users_controller.rb
L ..._controller.rb
所以你的base_controller应该继承自application_controller
class Admin::BaseController < ApplicationController
layout 'admin_layout' # Different layout for all admin pages
admin命名空间中的其他控制器将从base_controller继承
class Admin::UsersController < Admin::BaseController
def create
...
end