Help us understand the problem. What is going on with this article?

Railsのフォームについて

More than 1 year has passed since last update.

初めに

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が一対多であるときは

モデルファイルに

user.rb
has_many :posts
accepts_nested_attributes_for :posts
post.rb
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:

おわり。

sibakenY
大学卒業後Ruby, Ruby on Railsを勉強しています。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away