Rails の一意性の検証が失敗した場合、ユーザーが送り返されたときに、フォーム ビューでパーシャルを使用して重複レコードを表示したいと考えています。
どうすればこれを達成できますか? 現在、表示されるエラーメッセージを変更する方法しか知りません。
Rails の一意性の検証が失敗した場合、ユーザーが送り返されたときに、フォーム ビューでパーシャルを使用して重複レコードを表示したいと考えています。
どうすればこれを達成できますか? 現在、表示されるエラーメッセージを変更する方法しか知りません。
Rails でこれを行う組み込みの方法はなく、おそらく十数通りの方法があります。これは、エレガントではありませんが、必要なものを取得するための1つのアプローチです。
1) 一意性検証エラーがあるかどうかを確認します。残念ながら、これを行う簡単な方法はないため、コントローラーでエラーの名前を確認する必要があります。エラーが発生した場合は、既存のレコードを検索し、インスタンス変数に格納します。
def create
@new_model = Model.new(params[:model])
if @new_model.save
# success...
else
if @new_model.errors[:field].index("has already been taken")
@existing_record = Model.where(field: model.field).first
end
render :new
end
end
2) ビューで既存のレコードを部分的にレンダリングする
<%= render partial: 'partial_name', locals: {existing_record: @existing_record} %>