ネストされたフォームの関連付けでNotFound例外をエスケープする必要があります。例えばRails 4:エスケープが見つかりません。ネストされたフォームのエラー
、私は
class User < ActiveRecord::Base
has_many :user_selection_criteria
accepts_nested_attributes_for :user_selection_criteria, :reject_if => lambda { |t| t['brand_id'].nil? }, :allow_destroy => true
end
と
属性を更新if @user.update_attributes user_params
render
else
render json: @user.errors, status: :unprocessable_entity
end
を持って、paramsがこれを許可します、すべてがOKです。
私はネストされたフォームを、例えばそれらの属性で使用します。など
user_selection_criteria_attributes[0][id]
user_selection_criteria_attributes[0][brand_id]
user_selection_criteria_attributes[0][_destroy]
user_selection_criteria_attributes[1][id]
user_selection_criteria_attributes[1][brand_id]
user_selection_criteria_attributes[1][_destroy]
user_selection_criteria_attributes[2][id]
user_selection_criteria_attributes[2][brand_id]
user_selection_criteria_attributes[3][_destroy]
...
すべてがOKですが、私:
残すID空白 - 新しいレコードが既存のレコードの
使用IDが作成されます - 対応レコードが更新されます。ユーザーのための
しかし、別のユーザーが既にこのレコードを削除したとき、私は、例えば、非既存のレコードのidを使用する場合、私はtはIDとUserSelectionCriterium見つけるCouldn 'エラーを取得= 13 IDを持つ= 12
私は
begin
if @user.update_attributes user_params
render
else
render json: @user.errors, status: :unprocessable_entity
end
escape
render
end
を使用するとエラーがエスケープされていますが、属性は保存されません。しかし、それは期待されている。
質問:エラーをスケルチ/エスケープするには、そのレコードは無視され、他の有効な関係は保存されません。
I.e. id 13とのネストされた関係は存在しないが、id 14との関係が存在する場合、関係13は無視され、14は正常に処理される。
、多くの場合、どのように起こるとするということである可能性がどのように?個人的に私は気にしません。 'find_by(id:...)'のようなエラーを起こさないファインダを使用し、検証エラーを返します。 – Mohamad