0

私はユーザーがいて、ユーザーがプロファイルを持っているプロジェクトに取り組んでいます。ユーザー認証の目的でデバイスgemを使用しています。コントローラーのアクションのパスを変更したため、原因不明の動作が発生しました。

Test::Application.routes.draw do
  match '/:username' => 'profile#show' , :as => :username


  get "profile/update"

  get "static_pages/index"

  devise_for :users 

サーバーログには次のように表示されます。

Started POST "/users" for 127.0.0.1 at 2013-02-22 03:07:48 +0530
Processing by ProfileController#show as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"Tr90BvI6sztk7gxlPm6KF3td3xIe91SpCZDGsIniv60=", "user"=>{"username"=>"example", "email"=>"example@email.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Sign up", "username"=>"users"}
  Rendered profile/show.html.erb within layouts/application (0.1ms)
Completed 200 OK in 12ms (Views: 11.5ms | ActiveRecord: 0.0ms)

データがデータベースに挿入されておらず、ユーザー名パラメータが変更されています。ルートをデフォルトルートに変更すると、

match '/:username' => 'profile#show' , :as => :username

に変更されました

get "profile/show"

すべてが正常に戻りました。データが挿入され、すべてが正常に機能します。ユーザー登録のときにプロファイルコントローラーからのアクションが呼び出される理由とアクションがわかりません。rake routes次の出力が得られます

                username        /:username(.:format)           profile#show
          profile_update GET    /profile/update(.:format)      profile#update
      static_pages_index GET    /static_pages/index(.:format)  static_pages#index
        new_user_session GET    /users/sign_in(.:format)       devise/sessions#new
            user_session POST   /users/sign_in(.:format)       devise/sessions#create
    destroy_user_session DELETE /users/sign_out(.:format)      devise/sessions#destroy
           user_password POST   /users/password(.:format)      devise/passwords#create
       new_user_password GET    /users/password/new(.:format)  devise/passwords#new
      edit_user_password GET    /users/password/edit(.:format) devise/passwords#edit
                         PUT    /users/password(.:format)      devise/passwords#update
cancel_user_registration GET    /users/cancel(.:format)        devise/registrations#cancel
       user_registration POST   /users(.:format)               devise/registrations#create
   new_user_registration GET    /users/sign_up(.:format)       devise/registrations#new
  edit_user_registration GET    /users/edit(.:format)          devise/registrations#edit
                         PUT    /users(.:format)               devise/registrations#update
                         DELETE /users(.:format)               devise/registrations#destroy
                    root        /                              static_pages#inde

前もって感謝します。

4

1 に答える 1

0

ルートは、定義された順序で照合されます。はルートファイルの先頭で定義されており、特異性が低いため/:username、後で定義されたルートをマスキングしているように見えます。そのルートをファイルの一番下に移動するか、正規表現などの制約を適用して、「貪欲」を少なくすることをお勧めします。

于 2013-02-21T21:55:53.143 に答える