質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

1回答

760閲覧

編集画面の更新ボタンを押すとエラーがでてしまう

kgingr

総合スコア1

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2022/11/10 19:00

編集2022/11/10 23:29

前提

ECサイトを制作中なのですが、ジャンル編集画面の更新ができなくエラーが出てしまいます

実現したいこと

エラーを解決して更新できるようにしたい

発生している問題・エラーメッセージ

No route matches [PATCH] "/admin/genres"

該当のソースコード

rails/routes.rb

1 devise_for :admin, skip: [:registrations, :passwords] ,controllers: { 2 sessions: "admin/sessions" 3 } 4 # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html 5 6 namespace :admin do 7 resources :items, only: [:index, :new, :show, :edit] 8 end 9 10 namespace :admin do 11 resources :genres, only: [:index, :create, :edit, :update] 12 end 13 14 namespace :public do 15 root to: 'homes#top' 16 get '/about' => 'homes#about' 17 end 18 19 20 end

rails/genres_controller

1class Admin::GenresController < ApplicationController 2 3 before_action :authenticate_admin! 4 5 def index 6 @genres = Genre.all 7 @genre = Genre.new 8 end 9 10 def create 11 @genre = Genre.new(genre_params) 12 @genres = Genre.all 13 if @genre.save 14 flash[:notice] = "新しくジャンルを追加しました。" 15 redirect_to admin_genres_path 16 else 17 render 'index' 18 end 19 end 20 21 def edit 22 @genre = Genre.find(params[:id]) 23 end 24 25 def update 26 @genre = Genre.find(params[:id]) 27 if @genre.update(genre_params) 28 redirect_to admin_genres_path 29 flash[:notice] = "ジャンルを更新しました。" 30 else 31 render 'edit' 32 end 33 end 34 35 private 36 37 def genre_params 38 params.require(:genre).permit(:name) 39 end 40 41end 42

rails/index.html.erb

1<div class="container"> 2 <div class="row"> 3 <div class="ml-5"> 4     <h2 class="mb-3">ジャンル一覧・追加</h2> 5 </div> 6 </div> 7 <%= form_with model: @genre, url: admin_genres_path do |f| %> 8 <div class="row"> 9 <div class="col-11 mb-3"> 10 <div class="row"> 11 <div class="col-2 col-form-label">ジャンル名</div> 12 <div class="col-3"> 13 <%= f.text_field :name, autofocus: true, autocomplete: "name", class: "form-control"%> 14 </div> 15 <div class="col-2"> 16 <%= f.submit "新規登録",class: "btn btn-success col-10" %> 17 </div> 18 19 </div> 20 </div> 21 </div> 22 23 <% end %> 24 25 <div class="row"> 26 <div class="col-11 mt-3"> 27 <div class="row"> 28 <div class="col-5"> 29 <table class="table table-hover table-inverse"> 30 <thead class="table-secondary"> 31 <tr> 32 <th>ジャンル</th> 33 <th colspan="3"></th> 34 </tr> 35 </thead> 36 <tbody> 37 <% @genres.each do |genre| %> 38 <tr> 39 <td> 40 <%= genre.name %> 41 </td> 42 <td> 43 <%= link_to "編集", edit_admin_genre_path(genre.id), class: "btn btn-success col-10" %> 44 </td> 45 </tr> 46 <% end %> 47 48 </tbody> 49 </table> 50 51 </div> 52 </div> 53 </div> 54 </div> 55 56</div>

rails/edit.html.erb

1<div class="container"> 2 <div class="row"> 3 <div class="ml-5"> 4     <h2 class="mb-3">ジャンル編集</h2> 5 </div> 6 </div> 7 <%= form_with model: @genre, url: admin_genres_path do |f| %> 8 <div class="row"> 9 <div class="col-11 mb-3"> 10 <div class="row"> 11 <div class="col-2 col-form-label">ジャンル名</div> 12 <div class="col-3"> 13 <%= f.text_field :name, autofocus: true, autocomplete: "name", class: "form-control"%> 14 </div> 15 <div class="col-2"> 16 <%= f.submit "保存",class: "btn btn-success col-10" %> 17 </div> 18 19 </div> 20 </div> 21 </div> 22 23 <% end %> 24</div>

試したこと

rails routesによるpathの確認
editページの form_withへメソッド,idの追加

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

form_with で model: オプションを使い、 update アクションにとばしたいなら、 url: オプションはつける必要がありません。
つけるなら、正しいURLでないと。
admin_genres_path でなく admin_genre_path(@genre) です

投稿2022/11/11 11:58

winterboum

総合スコア23376

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問