2017-07-06 14 views
1

例:a Personモデルaccepts_nested_attributes_fora Petsモデルの例は、hereです。 form_for(@person)をネストされたfields_for :petsで送信すると、PeoplesControllerのupdateメソッドがヒットします。保存に失敗した場合、つまりペットの名前がpresence: trueの検証に失敗したため、ActiveModel :: Dirtyを使用してペットインスタンスに加えられた変更を復元することができます。そのため、 のフォームに変更を復元しますか?私はネストされたフォームの入力が、保存前と空白ではないペットの値を保持するように、これを行いたいと思います。Nails属性を持つRailsコントローラでrestore_attributesを使用するにはどうすればよいですか?

例:

def update 
    @person = Person.find(params[:id]) 
    respond_to do |format| 
    if @person.update_attributes(person_params) 
     format.html { redirect_to persons_path } 
    else 
     # @person.restore_attributes works for restoring the @person 
     # input values. I would like to do something like 
     # @person.pet.restore_attributes 
     format.html { render :edit } 
    end 
    end 
end 

答えて

1

私はこれを成し遂げるための方法を考え出しました。ネストされたfields_forを使用すると、そのフォーム内のオブジェクトにアクセスできるため、そのオブジェクトに対してrestore_attributesなどを呼び出すことができます。

粗例:

<%= form_for(@person) do |f| %> 
    <%= f.fields_for :pets do |ff| %> 
    <% 
    if ff.object.errors 
     ff.object.restore_attributes 
    end 
    %> 
    <% end %> 
<% end %> 
関連する問題