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

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

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

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

Q&A

1回答

818閲覧

form_withについて

gurase

総合スコア4

Ruby on Rails

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

0グッド

0クリップ

投稿2020/10/28 14:12

編集2020/10/28 14:22

Ruby on Railsの、form_withの使い方等がどの説明を見てもいまいち理解できず困っています。
以下の質問内容にあるコードなどは下記サイトでform_withについて説明しているものから引用をしています。
https://pikawaka.com/rails/form_with

質問①:
下記のコードの、form.text_field :nameの、nameが一体なんなのか、どこから来たのかがわかりません(そもそも、ハッシュの形ということは、form.text_fieldをキーとした時の値を表示しているということでしょうか?)

<%= form_with model: @user do |form| %> <%= form.text_field :name %> <%= form.submit %> <% end %>

質問②:
newアクションのあと、自動的にcreateアクションに移行するとありますが、これはどこかにそのような命令が書いてあるのでしょうか?それとも、Railsの仕様上、そういうものだという風に覚えておくしかないのでしょうか?

質問③:
form_withの引数にモデルクラスのインスタンスを指定していますが、入力情報を「データベースに保存する場合」と説明書きがあります。
しかし、実際にフォーム入力情報をデータベースに保存するタイミングはcreateアクション内でsaveメソッドを呼び出した時かと理解をしています。
そのため、質問②のとおり、newアクションのあとは必ず自動的にcreateアクションに移行するという仕様なのであれば、わざわざform_withの引数にモデルクラスのインスタンスを指定しなくてもデータベースに保存できるのではないかと思うのですがどうなのでしょうか?

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

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

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

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

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

guest

回答1

0

① Userモデルの name 属性を意味しています。
form.text_field の text_fieldは <input type=text> を作ってくれるmethodです
formは③参照

②form_with の仕様です。(下の「なお」参照)
③「Userモデル」のnameである、
submitした時に 「users_controller」 の createに行く
ということをform_withに知らせるためです

なお
@userが未だsaveされていない場合は createへ、DBから取り出したものの場合はupdateへ 行くように form_withが判断して設定してくれます。

投稿2020/10/28 14:32

winterboum

総合スコア23567

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

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

gurase

2020/10/28 14:48

ご回答ありがとうございます。 ①について、nameがUserモデルの属性であること、理解できました。しかし、わざわざtext_fieldの後ろに":name"とする理由がわかりません、、、。フォームで入力された情報のデータ送り先としてデータベースのnameカラムを指定しているということでしょうか?
winterboum

2020/10/28 23:03

それで作られた htmlをみれば分かると思います
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問