mmag

ハマったことメモなど

Phoenixでconfirm付きのdelete

phoenix_htmlのlinkヘルパは、リクエストメソッドがgetの場合は普通にaタグでリンクを作り、そうでない場合はaタグをformでラップして、onclick属性が働くような組み立て方をしてくれます。

で、何かリソースをdeleteするようなリンクでは、「ホントにOK?」な確認をして欲しいと思うわけで、Railsだとconfirmオプションとか与えればよかったのですが、Phoenixではそうもいかず。

ソースを読んでみると、どうやらonclick属性はオプションでカスタマイズできないようです。 なので、やってることはヘルパとほぼ同じだけどonclickだけ違う、みたいなものを目指して、こんな感じに落ち着きました。

<%= form_tag(user_path(@conn, :delete, @user), method: :delete) do %>
  <% onclick = "if (confirm('You sure?')) {this.parentNode.submit(); return false;}" %>
  <%= content_tag(:a, "delete", href: "#", onclick: onclick) %>
<% end %>

長いし、さすがにHack過ぎる気が...

テーマはFB matteをベースにしてます。作者さんに感謝を込めて。