Ruby on Railsについて質問です。

バージョンは3.0.5です。
 
モデルを「_(アンダースコア)」を含む名前にして「rails generate scaffold」で生成を行いました。
たとえばモデル名を「hoge_fuga」にしたとします。
生成されたコントローラークラス名は「HogeFugasController」となりました。
 
「rake db:migrate」を行い、Webrickサーバを立ち上げ、HogeFugasコントローラーのindexアクションにアクセスを行いました(http://localhost:3000/hogeFugas/index)。
しかし、「そのようなルートがない」というエラーメッセージが表示されアクセスすることができませんでした。
 
これは、モデル名にアンダースコアを含むのが規約に違反しているのでしょうか?
それともアクセスするURLが間違っているのでしょうか?
 
下記のURLについては試してみました。
http://localhost:3000/hogeFugas
http://localhost:3000/HogeFugas/index
http://localhost:3000/hogeFuga/index
http://localhost:3000/hoge_fuga/index
http://localhost:3000/hoge_fugas/index
いづれも同様のエラーでした。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2012/02/16 22:08:43

回答2件)

id:nuna No.1

回答回数32ベストアンサー獲得回数11

http://localhost:3000/hoge_fugas でアクセスできるはずです。
rake routes をしてみるとわかりますが、 /hoge_fugas/index というルーティングはありません。

config/routes.rb に resources :hoge_fugas と書かれていると思いますが、
こういった REST なルーティングを指定している場合には /hoge_fugas への GET が、リソース hoge_fugas (hoge_fuga の集合)の取得=一覧表示という意味になります。

昔は index を付けてましたが、REST 的には冗長なので付けないようになったという流れです。

id:Gaasu

回答ありがとうございます。

2012/02/16 22:07:43
id:windofjuly No.2

回答回数2625ベストアンサー獲得回数1149

Ruby のリファレンスマニュアルより
http://doc.ruby-lang.org/ja/1.9.3/doc/spec=2fdef.html

クラス名はアルファベットの大文字で始まる識別子です


Railsでは下記のようになります
・コードはキャメルケース(単語の先頭大文字/区切り無し)
  HogeFugasController
・URLはスネークケース(全て小文字/区切りはアンダーバー)
  hoge_fuga

アンダーバーを使うなという規約はありませんが、
モデル名も最初からキャメルケースにしておいたほうが面倒もないですね

id:Gaasu

回答ありがとうございます。

2012/02/16 22:07:39

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません