前提・実現したいこと
僕はgenreのマイグレーションファイルでunique: tureの設定をしてmigrateしたので、genre.saveの処理は成功せず失敗してelseの処理をするはずですが、それが実行されず、ActiveRecord::RecordNotUniqueというエラーになってしまいます。これはビューでは表示されずターミナルだけでの表示になってしまいます。
どうすればいいのでしょうか?
発生している問題・エラーメッセージ
ActiveRecord::RecordNotUnique (SQLite3::ConstraintException: UNIQUE constraint failed: genres.name: INSERT INTO "genres" ("name", "created_at", "updated_at") VALUES (?, ?, ?)): app/controllers/end_user/genres_controller.rb:18:in `block in create' app/controllers/end_user/genres_controller.rb:17:in `create'
該当のソースコード
ruby
1 db/migrate/20200112101444_create_genres.rb 2 3class CreateGenres < ActiveRecord::Migration[5.2] 4 def change 5 create_table :genres do |t| 6 t.string :name, null: false 7 t.timestamps 8 t.index :name, unique: true 9 end 10 end 11end 12
ruby
1 app/views/end_user/posts/_checkboxes.html.erb 2 3<%= form_with url: end_user_genres_path, model: @genre, remote: true do |f| %> 4 <div class="col-sm-6 col-sm-offset-3 form-group" > 5 <label>Genre : </label> 6 <%= f.text_field :name %> 7 <%= f.submit 'ジャンルを追加' %> 8 </div> 9<% end %>
ruby
1 app/controllers/end_user/genres_controller.rb 2 3class EndUser::GenresController < ApplicationController 4 def index 5 @user = current_user 6 @genres = Genre.all 7 end 8 9 def show 10 @user = current_user 11 @posts = Genre.find_by(params[:id]).posts.page(params[:page]).reverse_order 12 @comment = Comment.new 13 end 14 15 def create 16 @genre = Genre.new(genre_params) 17 @genres = Genre.all 18 @post = Post.new 19 respond_to do |format| 20 if @genre.save 21 format.html 22 format.js 23 else 24 format.js {render 'fail'} 25 end 26 end 27 end 28 29 private 30 def genre_params 31 params.require(:genre).permit(:name) 32 end 33end 34
試したこと
試したことはないのですが、unique: trueをつけないとうまく動きます。
補足情報(FW/ツールのバージョンなど)
バージョン
ruby : 2.5.5
rails : 5.2.3
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/17 05:46