2012-10-25 40 views
0

我使用命名空間網址導致不正確的操作'show'而不是'new',導致geting瘋狂。「沒有路由匹配」:帶路由選擇欄的夢魘名稱空間

當我使用這個網址:管理/ admin_utilisateurs /新 我得到這個錯誤

Routing Error 
No route matches {:action=>"show", :controller=>"admin/admin_utilisateurs"} 
Try running rake routes for more information on available routes. 

這是的link_to我用我的索引頁:

link_to 'Nouveau', new_admin_admin_utilisateur_path, :class => 'btn-text btn-dimensions btn-encrusted metal' 

這些都是我耙路線

        root  /           welcome#index 
        pub_responsables GET /catalogs/managers(.:format)     pub_responsables#index 
             POST /catalogs/managers(.:format)     pub_responsables#create 
        new_pub_responsable GET /catalogs/managers/new(.:format)    pub_responsables#new 
       edit_pub_responsable GET /catalogs/managers/:id/edit(.:format)   pub_responsables#edit 
         pub_responsable GET /catalogs/managers/:id(.:format)    pub_responsables#show 
             PUT /catalogs/managers/:id(.:format)    pub_responsables#update 
             DELETE /catalogs/managers/:id(.:format)    pub_responsables#destroy 
     new_admin_utilisateur_session GET /admin_utilisateurs/sign_in(.:format)   devise/sessions#new 
      admin_utilisateur_session POST /admin_utilisateurs/sign_in(.:format)   devise/sessions#create 
    destroy_admin_utilisateur_session DELETE /admin_utilisateurs/sign_out(.:format)   devise/sessions#destroy 
      admin_utilisateur_password POST /admin_utilisateurs/password(.:format)   devise/passwords#create 
     new_admin_utilisateur_password GET /admin_utilisateurs/password/new(.:format)  devise/passwords#new 
     edit_admin_utilisateur_password GET /admin_utilisateurs/password/edit(.:format) devise/passwords#edit 
             PUT /admin_utilisateurs/password(.:format)   devise/passwords#update 
cancel_admin_utilisateur_registration GET /admin_utilisateurs/cancel(.:format)   admin_utilisateurs/registrations#cancel 
     admin_utilisateur_registration POST /admin_utilisateurs(.:format)     admin_utilisateurs/registrations#create 
    new_admin_utilisateur_registration GET /admin_utilisateurs/sign_up(.:format)   admin_utilisateurs/registrations#new 
    edit_admin_utilisateur_registration GET /admin_utilisateurs/edit(.:format)    admin_utilisateurs/registrations#edit 
             PUT /admin_utilisateurs(.:format)     admin_utilisateurs/registrations#update 
             DELETE /admin_utilisateurs(.:format)     admin_utilisateurs/registrations#destroy 
     admin_utilisateur_confirmation POST /admin_utilisateurs/confirmation(.:format)  devise/confirmations#create 
    new_admin_utilisateur_confirmation GET /admin_utilisateurs/confirmation/new(.:format) devise/confirmations#new 
             GET /admin_utilisateurs/confirmation(.:format)  devise/confirmations#show 
      admin_utilisateur_unlock POST /admin_utilisateurs/unlock(.:format)   devise/unlocks#create 
     new_admin_utilisateur_unlock GET /admin_utilisateurs/unlock/new(.:format)  devise/unlocks#new 
             GET /admin_utilisateurs/unlock(.:format)   devise/unlocks#show 
      admin_admin_utilisateurs GET /admin/admin_utilisateurs(.:format)   admin/admin_utilisateurs#index 
             POST /admin/admin_utilisateurs(.:format)   admin/admin_utilisateurs#create 
      new_admin_admin_utilisateur GET /admin/admin_utilisateurs/new(.:format)  admin/admin_utilisateurs#new 
     edit_admin_admin_utilisateur GET /admin/admin_utilisateurs/:id/edit(.:format) admin/admin_utilisateurs#edit 
       admin_admin_utilisateur GET /admin/admin_utilisateurs/:id(.:format)  admin/admin_utilisateurs#show 
             PUT /admin/admin_utilisateurs/:id(.:format)  admin/admin_utilisateurs#update 
             DELETE /admin/admin_utilisateurs/:id(.:format)  admin/admin_utilisateurs#destroy 

有關信息,我在用戶表上使用了名爲「admin_utilisateurs」的Devise。 設計與選擇偉大的工作:database_authenticatable,:可證實,:採,:登記的,:可追蹤的,:timeoutable,:可驗證的,:可鎖定

的一點是,我設置的另一個控制器上admin_utilisateurs表管理的目的。

所以這裏是我的的config/routes.rb中

root :to => 'welcome#index' 

    resources :pub_responsables, :path =>'/catalogs/managers' 

    devise_for :admin_utilisateurs, :controllers => {:registrations => 'admin_utilisateurs/registrations'} 

    namespace :admin do 
    resources :admin_utilisateurs 
    end 

所以我的管理控制器位於應用程序/控制器/管理/ admin_utilisateurs_controller.rb

這裏的作用我的'新'控制器的動作:

class Admin::AdminUtilisateursController < ApplicationController 

    before_filter :authenticate_admin_utilisateur! 

    ... 

    def new 
    @admin_utilisateur = AdminUtilisateur.new 
    respond_with(@admin_utilisateur) 
    end 

    ... 
end 

該控制器的視圖位於app/view/admin/admin_utilisateurs/

但問題確實與路線相關,因爲'show','edit'和'update'的其他路徑正常工作。

如果我刪除我的控制器應用程序/控制器/管理員/ admin_utilisateurs_controller.rb,Rails沒有抱怨丟失控制器,她仍然抱怨「沒有顯示操作的路線」。

我真的迷路了。任何人都可以提醒一下嗎? 在此先感謝

=====更新1 =====

這關係到我的URL請求日誌:

Started GET "/admin/admin_utilisateurs/new" for 127.0.0.1 at 2012-10-25 12:55:05 +0200 
Processing by Admin::AdminUtilisateursController#new as HTML 
    Rendered shared/_main_title.html.haml (0.4ms) 
    Rendered admin/admin_utilisateurs/_form.html.haml (17.2ms) 
    Rendered admin/admin_utilisateurs/new.html.haml within layouts/application (31.7ms) 
Completed 500 Internal Server Error in 45ms 

ActionController::RoutingError (No route matches {:action=>"show", :controller=>"admin/admin_utilisateurs"}): 
    app/views/admin/admin_utilisateurs/_form.html.haml:1:in `_app_views_admin_admin_utilisateurs__form_html_haml___780348754_85631840' 
    app/views/admin/admin_utilisateurs/new.html.haml:9:in `_app_views_admin_admin_utilisateurs_new_html_haml__296364877_85537950' 
    app/controllers/admin/admin_utilisateurs_controller.rb:51:in `new' 

它似乎是正確的路由,但在視圖中有一個問題。

我重試刪除控制器文件admin_utilisateurs_controller.rb 但這次重新啓動我的web服務器(sudo服務apache2重新啓動),錯誤是不同的。 我這次得到了「路由錯誤未初始化的常量Admin :: AdminUtilisateursController」。

所以這confrim有在我看來是一個問題...... 更深的挖掘......

回答

0

OK,我發現這個問題。 這個問題是從我用我的「編輯」行動,併爲我的「新」行動我部分表單視圖來:/app/views/admin/admin_utilisateurs/_form.html.haml

= form_for @admin_utilisateur, :url => admin_admin_utilisateur_path, :html => {:class => "formulaire-standard"} do |f| 

    = render :partial => 'shared/error_message', :locals => { :element => @admin_utilisateur, :debut_erreur => 'Cet utilisateur ne peut être enregistré'} 

    .groupe-champs 
    .champ 
     = f.label :nom 
     = f.text_field :nom, :class => 'input-width-8-col', :required => 'required' 
    .champ 
     = f.label :prenom 
     = f.text_field :prenom, :class => 'input-width-5-col', :required => 'required' 
    .champ 
     = f.label :telephone 
     = f.telephone_field :telephone, :class => 'input-width-5-col', :required => 'required' 
    .champ 
     = f.label :mobile 
     = f.telephone_field :mobile, :class => 'input-width-5-col' 
    .champ 
     = f.label :email 
     = f.email_field :email, :class => 'input-width-8-col', :required => 'required' 

    .groupe-champs 
    = render :partial => 'shared/checkboxes_admin_utilisateur', :locals => { :resource => @admin_utilisateur } 


    .groupe-champs 
    .champ-1 
     = f.check_box :approved 
    .champ-5 
     = f.label :approved 
    .checkbox-explication 
     = t('activerecord.attributes.admin_utilisateur.explanations.active') 

    .separator 

    .groupe-actions 
    = f.submit 'Enregistrer', :class => 'btn-text btn-dimensions btn-encrusted metal' 
    = link_to 'Annuler', admin_admin_utilisateur_path, :class => 'btn-text btn-dimensions btn-encrusted metal' 

我錯誤地使用form_for標記。因爲我的形式命名空間內使用,我必須補充的命名空間爲它的參數,並刪除:url選項,否則這種形式只能用「編輯」行動工作:

= form_for [:admin, @admin_utilisateur], :html => {:class => "formulaire-standard"} do |f| 

這段代碼可以讓Rails的猜測使用什麼路徑來創建新記錄或編輯現有記錄。所以我不需要指定:url和:方法。

第二個錯誤是(一個經典的)link_to在窗體的底部。 我忘了 'S' 的路線幫手結束(admin_admin_utilisateurSSSS_path):

= link_to 'Annuler', admin_admin_utilisateurs_path, :class => 'btn-text btn-dimensions btn-encrusted metal' 

這個故事的寓意是:

ALLWAYS檢查您/log/development.log FILE! ;-)