Railsのルーティングに問題があります。ユーザーコントローラーで単一のリソースを使用したいのですが、期待どおりに機能しません。これが私のroutes.rbファイルの断片です:
scope :module => "frontend" do
root :to => "home#index"
resource :user, :controller => "user"
get "/sign_up" => "user#new"
get "/sign_in" => "user#sign_in"
get "/sign_out" => "user#sign_out"
post "/authenticate" => "user#authenticate"
resources :articles
resources :article_categories
end
たとえば「/user」や「/user/ new」のURLを使用すると機能すると思いましたが、機能しませんでした。ルーティングエラーが発生します:
No route matches {:controller=>"frontend/user"}
'rakeroutes'コマンドの出力は次のとおりです。
user POST /user(.:format) frontend/user#create
new_user GET /user/new(.:format) frontend/user#new
edit_user GET /user/edit(.:format) frontend/user#edit
GET /user(.:format) frontend/user#show
PUT /user(.:format) frontend/user#update
DELETE /user(.:format) frontend/user#destroy
sign_up GET /sign_up(.:format) frontend/user#new
sign_in GET /sign_in(.:format) frontend/user#sign_in
sign_out GET /sign_out(.:format) frontend/user#sign_out
POST / authenticate(.: format)フロントエンド/ user#authenticateを認証します
興味深いのは、次のように、ユーザーコントローラーでインデックスアクションのルートを追加すると、次のようになります。
scope :module => "frontend" do
root :to => "home#index"
resource :user, :controller => "user"
get "/user" => "user#index"
get "/sign_up" => "user#new"
get "/sign_in" => "user#sign_in"
get "/sign_out" => "user#sign_out"
post "/authenticate" => "user#authenticate"
resources :articles
resources :article_categories
end
...できます!
しかし、インデックスアクションはユーザーコントローラーで定義されていません!'rakeroutes'コマンドはGET/userに対して二重行を返します
GET /user(.:format) frontend/user#show
GET /user(.:format) frontend/user#index
だから私はそれが解決策ではないと思います。'/users'URLに割り当てられた他のアクションは機能しません。
次のようなインデックスアクションのルートを定義する必要がありますか
get "/controller_name" => "controller_name#index"
私は何が間違っているのですか?