重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

Ruby1.9.3とRails3.2.9の環境でのルーティングではまってしまっているので、御経験のある方、御教示ください。現在、

config/routes.rbに

Sample::Application.routes.draw do
resources :users
resources :tasks
match '/users/login'
match '/users/logout'
match ':controller(/:action(/:id))'
match ':controller(/:action(/:id))(.:format)'
end

を記述して、WEBrickを起動して、

http://localhost:3000/users/login/

を実行すると、このアドレスには移動するのですが、

NoMethodError in Users#show

Showing C:/user/Ruby193/rails/sample/app/views/users/show.html.erb where line #5 raised:

のエラーが出ます。

WEBrickの表示を見てみると、

Started GET "/users/login/" for 127.0.0.1 at 2013-01-22 22:56:06 +0900
Processing by UsersController#show as HTML
Parameters: {"id"=>"login"}
Rendered users/show.html.erb within layouts/users (2.0ms)
Completed 500 Internal Server Error in 5ms

となっていて、/users/login/をGETしているのですが、アクションでshowが呼び出されて、そのIDとして
loginが渡っているように見えます。

現在、users\controller.rbのshowの関数の定義は全てコメントアウトしています。usersコントローラの
def login関数の定義と、app/views/users/login.html.erbも置いているのですが、それらが表示されない状態で原因が分かりかねています。

上記のルーティングの書き方に何か問題があるのでしょうか?

A 回答 (1件)

単にresourcesで指定をしただけだと、7つの基本アクションすべてが実装されているとみなされますので、それらの一つでもかけていると動かないはずです。

show関数そのものをコメントアウトするのでなく、showの内部で実行する処理だけをコメントアウトして関数自体は存在するようにすればいいんじゃないでしょうか。

あるいは、resourcesにexcept指定をして、showアクションのみ除外するようにしてもいいと思います。

resources :users, :except => :show
    • good
    • 0
この回答へのお礼

情報ありがとうございます。

これが原因でした。

助かりました。ありがとうございます。

お礼日時:2013/01/23 23:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!