Rails
Railsチュートリアル

rails-ujsとjquery-ujsで2回リクエストが送られる

More than 1 year has passed since last update.


はじめに

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 (?, ?, ?, ?)):

スクリーンショット 2017-05-29 17.32.49.png

スクリーンショット 2017-05-29 17.33.49.png


解決方法

application.jsのjquery_ujsを外す。

 //= require jquery

-//= require jquery_ujs
//= require rails-ujs
//= require bootstrap
//= require turbolinks

添付したエラーを見てみると、jqueryとrails-ujsの両方が呼ばれていることが分かります。

Rails5.1系からjQuery依存が無くなっているため、jquery_ujsの方を外しても良いでしょう。(参考)