2014-05-22 62 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。 –

相關問題