PhoenixのDeleteボタン without JS

Phoenix frameworkのScaffoldが生成する Delete ボタンは、HTTP DELETEメソッドを呼び出す意図で実装されていますが、フレームワーク標準のJavascriptがないとGETメソッドコールとなり、単にshowアクションを実行する挙動になります。

これはRailsも同様で、Deleteが動作しない問題は多くの人が困るポイントです。代替手段として、deleteのオプションを指定したPOSTメソッドをコールすることでも削除のアクションを呼び出せます。

articleを削除する例では、以下のようなtemplateコードになります。

<%= form_for @conn, Routes.article_path(@conn, :delete, article), [method: "delete"], fn f -> %>
  <%= submit "Delete" %>
<%= end %>

CSSでsubmitボタンを装飾すれば、とくに違和感なく動作します。動作のポイントは、 マニュアルのform_for/4の:methodオプションが参考になります。

なお、confirmオプションによる確認挙動については、 link/2に解説がありますが、これはPhoenixの問題ではなく単にJavascriptのイベントハンドラを設定するという話です。

⁋ 2019/07/12↻ 2024/12/18
中馬崇尋
Chuma Takahiro