自分のqiitaアカウントからの転載です。
初めに
Railsのフォームについて忘備録としてまとめます。
form_with
まえはform_tagとかform_forとかあったが今はform_withがスタンダードらしい
form_withの場合モデルに関連するもの、関連しないものどちらも扱えるのでよい
書き方はform_forとほとんど同じなはず
基本的な形
基本的な形はこんな感じ
<%= form_with @user do |f| %>
<%= f.label :name %>
<%= f.text_field :name %>
<%= f.label :age %>
<%= f.number_field :age %>
<%= f.submit %>
<% end %>
urlを指定
urlを指定したい場合は
<%= form_with url: new_user_path do |f| %>
こうする。
ちなみに
こんなこともできる
<%= form_with model: User.new do |f| %>
とか
<%= form_with model: User.first do |f| %>
この場合はUser.firstをアップデートするときに使う
フォームをネストさせる
フォームをネストさせたい場合
例えばuserモデルとpostモデルがあるとして
user と postが一対多であるときは
モデルファイルに
has_many :posts
accepts_nested_attributes_for :posts
belongs_to :user
とかいたら準備完了。
フォームに
<%= form_with @user do |f| %>
<%= f.label :name %>
<%= f.text_field :name %>
<%= f.label :age %>
<%= f.number_field :age %>
<%= f.fields_for :posts do |m| %>
<%= m.label :body %>
<%= m.text_area :body %>
<% end %>
<%= f.submit %>
<% end %>
みたいな感じで使える
form_withでのセレクトボタンやラジオボタン、チェックボックス
まずチェックボックスについて
<%= f.check_box :admin %>
みたいな感じで行う
この場合:adminはboolean型でなければうまくいかない
次にラジオボタン
<label><%= f.radio_button :feeling, "fun" %>fun</label>
<label><%= f.radio_button :feeling, "soso" %>soso</label>
<label><%= f.radio_button :feeling, "not fun" %>not fun</label>
みたいにできる。
最後にセレクトボタン
<%= f.select :feeling, [["fun","fun"],["soso","soso"],["not fun","not fun"]] %>
こんな感じ
おまけ
最近enum?についての記事を見た
今まで使ったことなかったけどよさそうなので使ってみる。
使い方は簡単で例えばpostモデルにsecret,frends_only,everyone_allowっていうstatusを作るとしたら(英語がよくわからんからそこは許して….)
postにstatusというカラムをintegerで追加して
models/post.rbに
enum status: {secret: 0, frends_only: 1, all_people: 2}
と書いて終わり
フォームに
<%= m.select :status, Post.statuses.keys.to_a, {} %>
と書いたらそれでセレクトボタンを作ってくれる
値はpost.statusで数字ではなくsecretなどの文字を返してくれる。
便利!
多分二つのstatusならbooleanでいいけど三つ以上ならenumつかうとよい感じ:sunny:
おわり。
コメントを残す