要はこういうやつです。
$.ajax delete request not sending data parameters in capybara-webkit #512
やりたかったこと
Rails アプリで(js から) Ajax でレコードを削除したかったんです。
こういう感じになってました。
$.ajax 'url',
type: 'DELETE'
data: { hoge_id: "hoge_id" }
これはだいたいのブラウザ動きます。 PUT/DELETEメソッド - hokaccha.hamalog v2
コントローラで見てみると、ちゃんと hoge_id
というパラメータが渡ってくる。
だからふつうに動く!;x;
でもテストではパラメータが渡ってこない
でも、テスト走らせると、途中でコケる。
log/test.log をみながらデバッグすると、削除対象が取得できてない。
コントローラに渡ってくるパラメータに hoge_id がない。
解決
$.ajax 'url',
type: 'POST'
data: { hoge_id: "hoge_id", _method: 'DELETE' }
こうしたらいいよって @uu59 先生が教えてくれた。
うお〜、なるほどすぎる。。。頭固くなっちゃいけませんね><
気をつけること
- ajax request の DELETE/PUT/PATCH は
- だいたいのWebブラウザでは動く(でも HTML form の method属性値は違う)
- ブラウザ依存なので、対応してないことがある(テストでよく使う headless 系ブラウザは特に)から POST + _method 使うといいですね。
ちょっと整理
- capybara の javascript_driver で js ドライバを設定してる
- ドライバが capybara-webkit だったらブラウザは QtWebKit
- ドライバが Poltergeist だったらブラウザは PhantomJS