Rails4 form_tagでactionとmethodを指定する

form_tagでactionとmethodを指定したかった。

ルーティングは下記のように設定してあった。

resource :test, only: [:edit, :update]

edit内で、form_tagを使用していたが、初期値では、methodがpostになってしまったため、自分でmethodにpatchを指定する必要があった。


まず、下記のように記載したが、うまくいかなかった。

<%= form_tag({action: 'update', method: 'patch'}) do %>

HTMLのソースを表示すると、下記のようにmethodがactionの一部になっていた。

<form accept-charset="UTF-8" action="/test?method=patch" method="post">


下記のようにハッシュを分けるとうまくいった。

<%= form_tag({action: 'update'}, {method: 'patch'}) do %>

HTMLのソースを表示すると、actionもmethodも正常に設定されていることが確認できた。

<form accept-charset="UTF-8" action="/test" method="post">
<input name="_method" type="hidden" value="patch" />