在Rails 3.2中抢救ActiveRecord :: RecordNotUnique

时间:2013-05-21 14:09:23

标签: ruby ruby-on-rails-3 error-handling rails-activerecord

我是ruby的新手,我想确保模型中三列的组合是唯一的。我尝试将validates_uniqueness_of与范围一起使用,但它没有按预期工作。所以我在我的数据库中添加了一个唯一索引,每次保存已存在的值组合时,都会引发一个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)。

提前致谢

1 个答案:

答案 0 :(得分:1)

你是如何尝试使用validates_uniqueness_of的?您应该使用它来确保此组合是唯一的,如下所示:

validates_uniqueness_of :column1, :scope => [:column2, :column3]