Railsのフォームの作り方

自分の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:

おわり。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です