🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby on Rails

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

Q&A

1回答

567閲覧

Rails form_tag のmethodについて

yumikoro

総合スコア4

Ruby on Rails

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

0グッド

0クリップ

投稿2019/11/23 13:41

Rails勉強中です。

form_tagのmethodにPostとgetがあるのですが色々調べても使い分けがわかりません。

<%= form_tag("送り先, method: "???") do %>

送り先のルーティングがPostで定義されていたらmethodはPostになって、 
getで定義されたらmethodはgetになるのでしょうか?

使い分けどなたか教えていただけないでしょうか?
どうぞよろしくお願い致します。

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

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

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

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

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

guest

回答1

0

>あ、間違い 書き直します
form_for と勘違いして書いてました。
form_forなど、どのobjectについての formなのか、が書かれている場合はそのobjectがnewの状態なのかdatabaseから読み込まれたものなのか、に応じてget、postかがdefault設定されますが
form_tagは無指定では getになります。post(や他のもの)にするばあいは method optionで定義します。
config/routes.rb にどう定義してあるか、ではないです。
(対応するrotesが定義されていないとエラーになりますが)

投稿2019/11/23 22:40

編集2019/11/23 22:56
winterboum

総合スコア23567

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

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

yumikoro

2019/11/24 14:38

ご親切な回答ありがとうございますm(_)m >>config/routes.rb にどう定義してあるか、ではないです。 なるほど!関係なかったのですね。理解しました。 そうしますとform_tagはどんなときにPOSTになりGETになるのかまだわかりません…。。。 例えば<input>でUser情報追加したときは GETになるようなのですが、自分の感覚では Userのデーターベースに追加するかラPostなのかなって思ってしまいました…。 まだ切り分けがはっきりわかっていません(;_;) よろしくお願い致します。
winterboum

2019/11/24 14:41

defaultではgetになってしまうのではなかったかな。 rails が form_tag にたどり着いた時は、formの中がどうなっているかを知りませんから(先読みしても判断難しいですし)。 postにすべき時(crateとかupdateに行くような)ときは明示的に指定する
yumikoro

2019/11/25 18:53

再度お返事ありがとうございます。はい、Defaultではgetということは把握しておりました。 >>postにすべき時(crateとかupdateに行くような)ときは明示的に指定する 私も同じ間隔でしたが 下記の場合postだとNGでgetとのことでした。(progateの問題です) やっぱり難しいです(;_;) <%= form_tag("/users/create") do %> <p>ユーザー名</p> <input name="name"> <p>メールアドレス</p> <input name="email"> <input type="submit" value="新規登録"> <% end %>
winterboum

2019/11/25 21:27

それは、createに対してpostのrouteを定義していない、ということでは?
yumikoro

2019/11/27 18:32

お返事ありがとうございました!(気付かなかったです遅くなりすみません) createのRoute確認しましたら Postの定義をしていました(1行目)…。ますます謎です(;^ω^) post "users/create" => "users#create" get "signup" => "users#new" get "users/index" => "users#index" get "users/:id" => "users#show"
winterboum

2019/11/27 21:55 編集

routeは記述順も意味を持ちます。その行が最初ではないですよね?その前の記述も あと「下記の場合postだとNGでgetとのことでした。」ではなく、どういうエラーメッセージだったのかを書いて下さい
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問