前提・実現したいこと
Railsでブログを作っています。ブログのジャンルの名前の編集を行えるようにしたいです。
ここに質問の内容を詳しく書いてください。
ブログのジャンルを追加することはできるのですが編集画面に行き変更内容を送信しようとすると以下のようなエラー画面になってしまいます。おそらくeditアクションのparams[:id]で正しく値を受け取れていないと考えています。
発生している問題・エラーメッセージ
```ここに言語を入力 エラーメッセージ ActiveRecord::RecordNotFound in BloggenresController#edit Couldn't find Bloggenre with 'id'=index Extracted source (around line #17): Rails.root: /home/ec2-user/environment/baskeblogs Application Trace | Framework Trace | Full Trace app/controllers/bloggenres_controller.rb:17:in `edit' Request Parameters: {"utf8"=>"✓", "_method"=>"patch", "authenticity_token"=>"XD3nHM41lmA3yBjq1wAxcdbRCxjHtKXm3eDE7MYQENpSqBjgcyDMpdnhKqGGtvEKELGI4oGDjsJh945nyWKH5A==", "bloggenre"=>{"name"=>"ドリブル", "memo"=>"強さ"}, "commit"=>"送信", "actiion"=>"edit", "id"=>"index"} Toggle session dump Toggle env dump Response Headers:
'''
該当のソースコード
rails
ファイル名 bloggenres.cotoroller.rb class BloggenresController < ApplicationController layout 'bloggenres' def index @data = Bloggenre.all end def add @bloggenre = Bloggenre.new if request.post? then @bloggenre = Bloggenre.create bloggenre_params redirect_to '/bloggenres' end end def edit @bloggenre = Bloggenre.find(params[:id]) if request.patch? then @bloggenre.update bloggenre_params redirect_to '/bloggenres' end end private def bloggenre_params params.require(:bloggenre).permit(:name, :memo) end end
ファイル名 index.html.erb <h1>Bloggenres#index</h1> <p>※ジャンル・データの一覧</p> <table> <tr> <th>Id</th><th>name</th><th>memo</th><th></th> </tr> <% @data.each do |obj| %> <tr> <td><%= obj.id %></td> <td><%= obj.name %></td> <td><%= obj.memo %></td> <td><a href="/bloggenres/<%= obj.id %>">Edit</a></td> </tr> <% end %> </table> <p><a href="/bloggenres/add">新規作成>></a></p>
ファイル名 edit.html.erb <h1>Bloggenres#edit</h1> <p>※「<%= @bloggenre.name %>」ジャンルの編集</p> <% if @bloggenre.errors.any? %> <ul> <% @bloggenre.errors.full_messages.each do |err| %> <li><%= err %></li> <% end %> </ul> <% end %> <table> <%= form_for(@bloggenre, url:{controller:'bloggenres', actiion:'edit' }) do |form| %> <tr><th>Title</th> <td><%= form.text_field :name %></td></tr> <tr><th>Subtitle</th> <td><%= form.text_field :memo %></td></tr> <tr><th></th> <td><%= form.submit "送信" %></td></tr> <% end %> </table>
ファイル名 routes.rb Rails.application.routes.draw do root to: 'blogs#index' get 'blogs/index' get 'blogs', to: 'blogs#index' get 'blogs/:page', to: 'blogs#index' get 'blogs/genre/:id', to: 'blogs#genre' get 'blogs/genre/:id/:page', to: 'blogs#genre' get 'blogs/show/:id', to: 'blogs#show' get 'blogposts/index' get 'blogposts', to: 'blogposts#index' get 'blogposts/delete/:id', to: 'blogposts#delete' post 'blogposts/delete', to: 'blogposts#delete' post 'blogposts/delete/:id', to: 'blogposts#delete' get 'blogposts/add' post 'blogposts/add' get 'blogposts/:id', to: 'blogposts#edit' patch 'blogposts/:id', to: 'blogposts#edit' get 'blogposts/delete' get 'bloggenres/index' get 'bloggenres', to: 'bloggenres#index' get 'bloggenres/add' post 'bloggenres/add' get 'bloggenres/:id', to: 'bloggenres#edit' patch 'bloggenres/:id', to: 'bloggenres#edit' get 'blogconfigs/index' get 'blogconfigs', to: 'blogconfigs#index' get 'blogconfigs/edit' patch 'blogconfigs/edit' end
試したこと
bloggenresコントローラのeditアクションで
@bloggenre = Bloggenre.find(1)のようにidを指定した場合はきちんとジャンルの名前を編集することはできました。
補足情報(FW/ツールのバージョンなど)
プログラミング初心者、初投稿なので、至らぬ点もあると思いますがどうぞよろしくお願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。