バージョンは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
いづれも同様のエラーでした。
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 的には冗長なので付けないようになったという流れです。
Ruby のリファレンスマニュアルより
http://doc.ruby-lang.org/ja/1.9.3/doc/spec=2fdef.html
クラス名はアルファベットの大文字で始まる識別子です
Railsでは下記のようになります
・コードはキャメルケース(単語の先頭大文字/区切り無し)
HogeFugasController
・URLはスネークケース(全て小文字/区切りはアンダーバー)
hoge_fuga
アンダーバーを使うなという規約はありませんが、
モデル名も最初からキャメルケースにしておいたほうが面倒もないですね
回答ありがとうございます。
回答ありがとうございます。
2012/02/16 22:07:43