Railsのform_withについて

今回はヘルパーメソッドで使われるform_withの中の記述。

なんでmodelのみの時とurlと一緒の時があるのか。

実は省略されているか、されていないかの違いらしい。

 

<1><%= form_with(model: @tweet, local: true) do |form| %>

 

これはある写真投稿アプリの写真を新規投稿する時の画面におけるビューの記述

  

本来は url が記載されているはずではあるが、なぜか省略できる。

理由は不明。いずれ調べたい。

 

そしてデータベースへ投稿フォームに記述した内容が保存される必要があるのでmodelを使っている、ということらしい。

まず、form_withが実行された時、渡されたインスタンスの中身が空かそうではないかをRuby on Rails君が識別する。

今回は新規投稿なので、paramsが空。

よってRails君の自動識別で空の時の反応がなされてcreateアクションへ、となる。

もしもインスタンスの中に情報が入っていた場合は、投稿の編集ということになるので、updateへ繋がる。

(ちなみに新規投稿と投稿編集では同じ記述になっている)

 

 

<2> <%= form_with model:@user, url: user_registration_path, id:'new_user', class:'new_user'', local: true do |form| %>

 

これはある写真投稿アプリの新規ユーザー登録画面のビューの記述

 

ここでも、登録フォームに記述した内容がデータベースに保存される必要があるのでmodelを使っている。

そしてなぜか今回は省略できないので、url が記載されている。

ちなみにこれ url を記述しないとRouting Error になる!

①同様に、form_withが実行された時、渡されたインスタンスの中身が空かそうではないかをRails君が識別する。

今回は新規ユーザー登録なので、paramsが空。

よってRails君の自動識別で空の時の反応がなされて新規登録となる。

しかしユーザー情報の変更や更新の場合、paramsには既にデータが入っているのでupdateアクションへ繋がる、らしい。

 

 

<3><%= form_with(url: search_tweets_path, local: true, method:get, class: "search-form") do |form| %>

 

これは検索窓の記述。

 

ここでは検索フォームに打ち込んだ文字がデータベースに保存される必要はないのでmodelは使われていない。

 

ちなみにまだ勉強不足で、id,class, なぜカッコで閉じる時と閉じない時があるかはまだ調べていない。

 

 

わからないだらけでプログラミング言語は調べ甲斐があるなぁ〜...( ¨)遠い目

というわけで明日も頑張ろう!