1. sibakenY

    Posted

    sibakenY
Changes in title
+Railsのフォームについて
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,160 @@
+#初めに
+
+Railsのフォームについて忘備録としてまとめます。
+
+#form_with
+
+まえはform_tagとかform_forとかあったが今はform_withがスタンダードらしい
+
+form_withの場合モデルに関連するもの、関連しないものどちらも扱えるのでよい
+
+書き方はform_forとほとんど同じなはず
+
+#基本的な形
+
+基本的な形はこんな感じ
+
+```erb
+<%= form_with @user do |f| %>
+ <%= f.label :name %>
+ <%= f.text_field :name %>
+ <%= f.label :age %>
+ <%= f.number_field :age %>
+ <%= f.submit %>
+<% end %>
+```
+
+#urlを指定
+
+urlを指定したい場合は
+
+```erb
+<%= form_with url: new_user_path do |f| %>
+```
+
+こうする。
+
+#ちなみに
+
+こんなこともできる
+
+```erb
+<%= form_with model: User.new do |f| %>
+```
+
+とか
+
+```erb
+<%= form_with model: User.first do |f| %>
+```
+
+この場合はUser.firstをアップデートするときに使う
+
+
+#フォームをネストさせる
+
+フォームをネストさせたい場合
+
+例えばuserモデルとpostモデルがあるとして
+
+user と postが一対多であるときは
+
+モデルファイルに
+
+```ruby:user.rb
+has_many :posts
+accepts_nested_attributes_for :posts
+```
+
+```ruby:post.rb
+belongs_to :user
+```
+
+とかいたら準備完了。
+
+フォームに
+
+```erb
+<%= 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でのセレクトボタンやラジオボタン、チェックボックス
+
+まずチェックボックスについて
+
+
+```erb
+<%= f.check_box :admin %>
+```
+
+みたいな感じで行う
+
+この場合:adminはboolean型でなければうまくいかない
+
+次にラジオボタン
+
+
+```erb
+<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>
+```
+
+みたいにできる。
+
+最後にセレクトボタン
+
+```erb
+<%= 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に
+
+```ruby
+enum status: {secret: 0, frends_only: 1, all_people: 2}
+```
+
+と書いて終わり
+
+
+フォームに
+
+```erb
+<%= m.select :status, Post.statuses.keys.to_a, {} %>
+```
+
+と書いたらそれでセレクトボタンを作ってくれる
+
+値はpost.statusで数字ではなくsecretなどの文字を返してくれる。
+
+便利!
+
+多分二つのstatusならbooleanでいいけど三つ以上ならenumつかうとよい感じ:sunny:
+
+
+おわり。