0

「new」ではなく「show」という誤ったアクションにつながるネームスペース URL に頭がおかしくなっています。

この URL を使用している場合: admin/admin_utilisateurs/new このエラーが発生します:

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を使用しています。Devise はオプションでうまく機能しています: :database_authenticatable, :confirmable, :recoverable, :registerable, :trackable, :timeoutable, :validatable, :lockable

要点は、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

したがって、私の管理コントローラーはapp/controllers/admin/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' の他のパスが適切に機能しているため、問題は実際にはルートに関連しています。

また、コントローラー app/controllers/admin/admin_utilisateurs_controller.rb を削除すると、Rails はコントローラーが見つからないことについて不平を言っているのではなく、「show アクションのルートがない」ことについて不平を言っています。

私は本当に迷っています。誰でもアドバイスしてもらえますか?前もって感謝します

===== 更新 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 service apache2 restart)、エラーは異なりました。今回は「Routing error uninitialized constant Admin::AdminUtilisateursController」を取得しました。

したがって、これは私の見解に問題があることを確認しています...さらに深く掘り下げます...

4

1 に答える 1

0

問題が見つかりました。この問題は、「編集」アクションと「新規」アクションに使用する部分的なフォーム ビューから発生していました: /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 と :method を指定する必要はありません。

2 番目の間違いは (古典的なものです) フォームの下部にある link_to です。ルートヘルパー (admin_admin_utilisateurSSSS_path) の末尾にある「s」を忘れました:

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

物語の教訓:

常に /log/development.log ファイルを確認してください。;-)

于 2012-10-25T11:29:55.737 に答える