質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

解決済

2回答

8232閲覧

Railsのform_tagでのmethod使い分けについて

GOROGORO

総合スコア66

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

1クリップ

投稿2015/06/16 15:01

Rails4でアプリケーション開発をしています。

viewでform_tagを利用した場合のmethodの使い分けについて質問させてください。

以下のようにform_tagを記載してmethodをputにしようとしています。

lang

1<%= form_tag(@path, multipart: true, method: 'put') do %> 2... 3<% end %>

実際に画面にアクセスすると以下のようなコードとなっています。

lang

1<form accept-charset="UTF-8" action="/blog_indices/2" enctype="multipart/form-data" method="post"> 2<div style="display:none"> 3<input name="utf8" type="hidden" value="&#x2713;" /> 4<input name="_method" type="hidden" value="put" /> 5<input name="authenticity_token" type="hidden" value="9/MWuUK4wjlljjnZB7eLnFY3Wgik4xBn7urA37TF92g=" /></div>

methodで指定した値がhiddenとしてコードが生成されています。
methodの渡し方が悪いのだとは思うのですが、どのように実装すればformの中にmedhodオプションが展開されるでしょうか?

以上よろしくお願いします!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

HTMLの<form>要素ではGETPOSTしか指定できないので、method='put'と書いてもブラウザで処理できません。

そこで、メソッドを隠しパラメターとして持たせることで、Rails側でエミュレートしています。

なお、curlなどから本当にPUTでリクエストを送ることも、もちろん可能です。

投稿2015/06/17 00:07

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

... formの中にmedhodオプションが展開...

質問文のなかの展開結果でも form タグ の method 属性として "put" は
展開されてますよね。

<form accept-charset="UTF-8" action="/blog_indices/2" enctype="multipart/form-data" method="post">

form_for, form_tag については以下のページが参考になります。

このページ中で hidden を検索してみてください。
次のような例がみつかります。

form_tag(search_path, method: "patch")
...

<form accept-charset="UTF-8" action="/search" method="post"> <div style="margin:0;padding:0"> <input name="_method" type="hidden" value="patch" /> <input name="utf8" type="hidden" value="&#x2713;" /> <input name="authenticity_token" type="hidden" value="f755bb0ed134b76c432144748a6d4b7a7ddf2b71" /> </div>

method は form タグの属性として展開されていますが、_method として hidden 値でも展開されるようです。
コントローラで params[_method] として参照することで、どの http メソッドで呼ばれたがを判定できるようです。

投稿2015/06/16 22:06

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

GOROGORO

2015/06/16 22:24

コメントありがとうございます。 すいません。初歩的な質問なのかもしれませんが、 >method 属性として "put" は展開されてますよね。 ⇒method: 'put' で指定しているのに、展開したformタグでは method="post" と展開されているのはなぜなのでしょうか。。。 この展開のされ方でputで展開されていると判断するためにはどこを確認すればよいのでしょうか?
rifuch

2015/06/17 00:50

下の方も書かれていますが、HTMLのFORMがPOSTとGETしか送れないことが多いため、POSTで送られたリクエストに関しては、ActionDispatchでパラメータを解析して、PUTやPATCHに置き換えています。 置き換えられた結果(Railsが判定しているMethod)を確認したいときは、Requestオブジェクトを見ると良いです。 request.request_method
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問