2014-05-22 106 views
0

SingularI有这个问题。我在路由文件我的路线定义为:没有路由匹配{:action =>“show”,:controller =>“admin/user”}

namespace :admin do 
    root to: "home#index" 
    resources :define_user 
end 

我创建的用户控制器:

class DefineUsersController < ApplicationController 

    def create 
    ... 
    end 

    def destroy 
    ... 
    end 
    end 

我的观点新文件夹“define_users”创建了文件“show.html.haml”。我打电话给它使用link_to:

=link_to 'User', admin_define_user_path 

而我得到上述错误。我想留下单数的名字。感谢所有的答案。

+0

先给像这个'= link_to'User',admin_define_user_path(@define_user)' – Pavan

+0

你在控制器中有'show'方法吗? – Pavan

+0

用show方法不工作,也没有。 – user2239655

回答

1

您正在尝试没有DefineUser对象的ID来访问显示路线

= link_to 'User', admin_define_user_path(define_user) 

哪里define_user是这个对象

+0

我编辑我的问题是有可能这样做没有任何id。有奇异的路径? – user2239655

+0

@ user2239655,Nope。你只能硬编码,但它必须存在。 或者,作为一个选项,您可以定义要显示的自定义路线,但它真的很奇怪) – Clamoris

1

首先的DefineUser class和id的对象,如果你想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 

在管理命名空间的控制器将被继承base_controller

class Admin::UsersController < Admin::BaseController 
    def create 
    ... 
    end 
+0

是的,您是正确的它适用于我,但我有特定的坐标。我编写用户名I,并获取用户数据。我想有独特的路线。它会更干净 – user2239655

+0

我还没有明白你需要什么=) 你可以做路由中的资源:define_user。你不能链接到某个对象而不提供它的ID。 –

相关问题