37
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

link_toで突然methodが効かなくなって困ってるあなたへ

Last updated at Posted at 2016-03-19

最近あったこと

Railsで、deviseを使ってサインアウトのリンクを貼っていたところ、ページ遷移が行われなかった。

スクリーンショット 2016-03-19 13.32.01.png

サーバーのログを確認すると……

Started GET "/users/sign_out" for ::1 at 2016-03-19 13:32:29 +0900

GETでアクセスしてる。

現状

_header.html.haml
%ul.dropdown-menu{:role => "menu"}
  %li
    = link_to 'マイページへ', user_path(current_user)
  %li
    = link_to 'サインアウト', destroy_user_session_path, method: :delete

ちゃんと書いてある。

原因

作業の途中で読み込むべきファイルのrequireを消していた。
(Railsであれば元から記述してあるはず)

(誤)

application.js
//= require jquery
//= require turbolinks
//= require bootstrap

(正)

application.js
//= require jquery
//= require jquery_ujs ←こいつが必要
//= require turbolinks
//= require bootstrap

これなんだろう

jquery_ujs
Ruby on Rails unobtrusive scripting adapter for jQuery

・force confirmation dialogs for various actions;
・make non-GET requests from hyperlinks;
・make forms or hyperlinks submit data asynchronously with Ajax;
・have submit buttons become automatically disabled on form submit to prevent double-clicking.

だって!!(あとは訳して)

今回の話で言うと、上から2つ目のこれ

・make non-GET requests from hyperlinks;

GET以外のハイパーリンクを結んでくれるらしい。

These features are achieved by adding certain "data" attributes to your HTML markup.

data属性が云々とのことなので、実際に先ほどのHTMLをドン

headernohtml.html
<li>
  <a rel="nofollow" data-method="delete" href="/users/sign_out">サインアウト</a>
</li>

data-method属性にいい感じに指定してくれるっぽいですね。

所感

Railsばっかり弄っていると、こういう所が勝手に上手くいくものと思い込んでたから怖いと思った。これからはRailsの中身も弄って遊んでいきたい。

参考にさせていただいたサイト様

Ruby on Rails unobtrusive scripting adapter for jQuery
TechRacho link_toのmethodが効かない!?

37
22
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
37
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?