fields_forを使う時、表示順を指定するために、
controller
@child_models = @parent_model.child_models.order(created_at: :desc)
view
# view
= f.form_for @parent_model do |f|
= f.fields_for :model @child_models do |ff|
〜
とすると、バリデーションエラー時にfields_for内の値が編集前の値に戻ってしまう。
なので、以下のように値をコントローラでセットしてからrenderする。
controller
def update
if @parent_model.update(parent_model_params)
〜
else
# ここでセットする
@child_models.each do |c|
c.attributes = params.permit![:parent_model][:child_model_attributes]
.to_h
.select{ |k, v| v[:id] == d.id.to_s }.values[0]
.slice(
:セットしたい値1,
:セットしたい値2,
...
)
end
render :edit
end
end