【Rails7.0】削除リンクが作成出来ない場合の作成方法
概要
昨夜、CRUD処理のDeleteの実装で、Deleteメソッドが効かないトラブルに遭遇した。
今回はその原因と解決法をまとめたので、ここに記述する。
問題
Rails7.0で
- Deleteメソッドが効かない
-
link_to
が機能しない
正確に記述すると
- 削除リンクが作成出来ない
原因
Ruby on Rails 7.0では、rails-ujs
が標準構成から外れ、Turbo
が標準構成に入った。
それに伴い、Deleteが機能せず、確認メッセージも表示されなくなった。
Turbo Framesとは
前提知識:Hotwire
Hotwire
は、JavaScriptを極力書かずにモダンなアプリケーションを作成するためのフレームワーク。Hotwire
自体はライブラリではなく、実態は複数のライブラリを統合したもの。
Turbo
はHotwire
の中心となる要素だ。
TurboはTypeScriptで書かれたサーバー側言語に依存しないフレームワークだが、サーバー側言語との接続にはアダプタを書く必要がある。
Railsで使う場合はすでに用意されていて、便利なヘルパーを使うことができる。このヘルパーを実装するのがgem turbo-rails
だ。
rails-ujsとは
Railsの一部のRESTfulな動作や非同期な処理などを実現するために、JavaScriptの送信に関する処理などが書かれたライブラリ。
例えば、Viewヘルパーの form_with
( form_for
など)の remote: true
オプションだったり、 link_to
の method: :delete
などのオプションをそれっぽく動くように動作させられるようになる
解決策
以下のgemをインストールしよう
gem "importmap-rails" #ESMとimportmapを使用して、トランスパイルやバンドルなしでRailsのモダンなJavaScriptを管理
gem "turbo-rails" #JavaScriptを一切記述することなく、シングルページのWebアプリケーションのようなスピードを実現
gem "stimulus-rails" #あなたがすでに持っているHTMLのための控えめなJavaScriptフレームワーク
インストール後は
$ rails importmap:install
$ rails turbo:install stimulus:install
以上のコマンドを実行することで無事に、Deleteメソッドが使用できるようになる。
※その際以下のファイルは初期化されるので既に存在&記述してある場合は注意が必要だ
app/javascript/application.js
config/importmap.rb
参考
まとめ
- 原因:Rails7.0で削除リンクが作成出来ないのは、7.0からはrails-ujsが標準構成から外れ、Turboが標準構成に入ったから
- 解決策:gemの
importmap-rails
とturbo-rails
とstimulus-rails
の3つをインストールしよう
Discussion