概要
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などとどの情報をあげるのか指定してあげなければ該当するすべての情報を渡してしまって入力画面のフォームが倍増した。