0
1

More than 3 years have passed since last update.

fields_forについて

Last updated at Posted at 2020-05-02

背景

便利なメソッドではあるがイマイチ使いこなせてないと思い、概要を調べ備忘録としてまとめた。

fields_forとは

親モデルに紐付いた子モデルのデータを編集するときに使用します。
もう少しわかりやすく言うと、form内で異なるモデルを編集することができるということです。
特に画像を扱うときに使うことが多いかと思います。。(多分)

使い方

コントローラー

「new」も「build」もインスタンスを生成するメソッドだが、Railsの慣習的にモデル同士の関連付けの際は「build」を使う。

users_controller.rb
省略
  def new
    @user = User.new        #空のインスタンスが生成される
    @user.photos.build      #UserモデルとPhotoモデルの関連付け
  end
省略

モデル

Userモデルの子に値するPhotoモデルを通して、photosテーブルに写真を保存する

user.rb

class User < ApplicationRecord
省略
  accepts_nested_attributes_for :photos
end

ビュー

モデルオプションに、@userをモデルオブジェクトとして扱う。こうすることで、URLとHTTPメソッドを自動推測してくれます。(今回の場合、@userは空なので、createアクションに飛びます)
また、fiels_forを使うことで、子モデル(今回ではPhotoモデル)に変更を加えることができる。

new.html.erb

<%= form_with model: @user do |f| %>
  省略
  <%= f.fields_for :photos do |i| %>
    <%= image_tag(i.object.content) %>  #画像があれば表示する
    <%= i.file_field :image %>
  <% end %>
  省略
  <%= f.submit "投稿", class: "btn btn-primary" %>
<% end %>
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1