rails scaffoldで作成したcontrollerに独自のactionを追加する場合の注意
scaffold
$ rails g scaffold hoge a:integer b:string c:integer
$ rails g scaffold hoge a:integer b:string c:integer
上記のようなコマンドで基本的なMVCをまとめて作ってくれてありがたいのですが、初心者が故にこれで躓くことがあったので共有します。
controllerにactionを追加するとエラーが発生
上記のコマンドで作成したモデルのcontrollerに独自のアクションを追加したところ、そのアクションにアクセスするところでエラーが出た。
- ルートの宣言を忘れている場合。
- ルートの宣言はしっかりしている場合。
私の場合は2のパターンだったため混乱しました。
scaffoldで作成すると、 以下のようにresources:
でルートが定義されます。
resources :hoge
このhoge
モデルにdetail
というアクションを自分で追加した場合に私は思考停止で適当に以下のように書いていました。
resources :hoge
get 'hoge/detail'
そしてブラウザからアクセスすると、以下のようなエラーが発生し頭を抱えます。
ActiveRecord::RecordNotFound in MessagesController#show
Couldn't find Message with 'id'=detail
これが解決できなかったので(ググっても躓いている人すらいない笑)デフォルトのアクションを改造したりして逃げていたのですが、なんとか解決しました。
route.rb
get 'hoge/detail'
resources :hoge
独自のアクションはresource
より上に書かないといけないらしいです。これだけ。
あとがき
普通なら躓くところではないかもしれませんが、 route.rb
が複雑になっているとこういう部分を見落としたりするので今回気づけてよかったです。
Author And Source
この問題について(rails scaffoldで作成したcontrollerに独自のactionを追加する場合の注意), 我々は、より多くの情報をここで見つけました https://qiita.com/zukakosan/items/877f1b8305c9df900a06著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .