0
我是ruby的新手,我想確保模型中三列的組合是唯一的。我嘗試使用validates_uniqueness_of與範圍,但它沒有按預期工作。所以我給我的數據庫添加了一個唯一的索引,每次保存已經存在的值組合時,都會引發ActiveRecord :: RecordNotUnique異常。問題是我不確定如何處理異常。在我的控制器中我改變了更新動作:在Rails 3.2中拯救ActiveRecord :: RecordNotUnique
def update
@patient_history = PatientHistory.find(params[:id])
@patient_history.save!
respond_to do |format|
format.html { redirect_to @patient_history, notice: 'Patient history was successfully updated.' }
format.json { head :no_content }
end
rescue ActiveRecord::RecordNotUnique
respond_to do |format|
format.html { render action: "edit" }
format.json { render json: @patient_history.errors, status: :unprocessable_entity }
end
end
end
此代碼不會保存更改並重定向到我的模型的顯示頁面(:patient_history)與通知「患者的病史已成功更新」。我想要做的是讓控制器重定向到編輯頁面,並在頁面頂部閃爍一條關於錯誤的消息(就像validates_uniqueness會做的那樣)。
在此先感謝
是的,這就是我所做的,但它並不總是正常工作。所以這就是我添加索引的原因。 – Michael
@Marek Rails驗證方法不會阻止競爭條件,在SQL中創建「硬件」索引總是一個好主意。只是因爲它不經常發生,我通常更喜歡「讓它失敗」的範例,但這取決於你的客戶。 –
我想使它發生錯誤時,將用戶重定向到表單頁面,並可能會打印出一個錯誤信息。但是無論我在控制器中嘗試過,它都不起作用。 – Michael