はじめに
Railsチュートリアルの拡張機能でいいね機能を実装した時に、Ajaxの処理のところで詰まったので記事にしました。
問題があったソースコードはこちらです。
いいね機能自体の実装が知りたい方はこちらのPRを参考にしてください
環境
- Ruby 2.4.1
- Rails 5.1.1
発生した問題
いいねボタンを押した時にいいねのカウントが2個増えたり、処理が固まったりする現象が発生しました。
処理が固まった時のエラーはこんな感じで出ていました。
ActiveRecord::StatementInvalid (SQLite3::BusyException: database is locked: commit transaction):
ActiveRecord::StatementInvalid (SQLite3::BusyException: database is locked: INSERT INTO "likes" ("user_id", "micropost_id", "created_at", "updated_at") VALUES (?, ?, ?, ?)):
解決方法
application.jsのjquery_ujsを外す。
//= require jquery
-//= require jquery_ujs
//= require rails-ujs
//= require bootstrap
//= require turbolinks
添付したエラーを見てみると、jqueryとrails-ujsの両方が呼ばれていることが分かります。
Rails5.1系からjQuery依存が無くなっているため、jquery_ujsの方を外しても良いでしょう。(参考)