5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

fields_forに既に情報の書かれている情報を渡す

Posted at

概要

fields_forでの新規作成されたインスタンス変数ではなくて、既に情報の書かれたインスタンス変数を渡す時(validation, edit等で)に手こずったのでメモ

fields_for

一つのフォームで二つ以上のモデルに情報を保存したい時に使用する。
仮にuserテーブルとprojectsテーブルがあるとする。
userはnameカラムがあり、projectはtitleカラムとcontentカラムがある。

user_model.html
has_many :projects
accepts_nested_attributes_for :projects
users_controller.html
def new
@user = User.new
end

def edit
@usr = User.find(params[:id])
end

省略
new.html.erb
<%= form_for @user |f| %>
<%= f.text_area :name %>
<%= f.fields_for :project |ff|%>
<%= ff.text_area :title %>
edit.html.erb
<%= form_for @user |f| %>
<%= f.text_area :name %>
<%= f.fields_for :project, @user.project.title |ff|%>
<%= ff.text_area :title %>
<%= f.fields_for :project, @user.project.content |ff|%>
<%= ff.text_area :title %>
省略

edit.htmlの3行目と5行目がわからなかった、それ以外はググったら出てくる。
fields_forで幾つか情報を渡したい時、このように
第二引数として@user.project.titleなどとどの情報をあげるのか指定してあげなければ該当するすべての情報を渡してしまって入力画面のフォームが倍増した。

5
6
1

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
5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?