LoginSignup
1
0

More than 5 years have passed since last update.

[Rails] fields_forで引数に@child_modelsを取ると、バリデーションエラー時にfields_for内の値が編集前の値に戻ってしまう

Last updated at Posted at 2018-11-16

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
1
0
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
1
0