处理一个独特的错误

时间:2014-01-02 17:07:26

标签: ruby-on-rails error-handling unique

所以我有一个名为Awards的数据库。

用户可以“奖励”食谱,但他们只能这样做一次。奖励数据库由recipe_id和user_id组成。我已经使这两个列都独一无二,所以它不会让你不止一次授予这个配方。这很好,如果你第二次尝试奖励食谱,我会收到这个错误:

columns user_id, recipe_id are not unique

是否有一些代码可以添加到创建操作中以检查此错误,然后呈现闪存错误消息,例如“已经授予的配方”而不是显示错误控制台?

这是我的创建方法:

def create
  @award = current_user.awards.build(award_params)
  if @award.save
    flash[:success] = "Award Given!"
    redirect_to recipe_path(params[:recipe_id])
  else
    render 'static_pages/home'
  end
end

谢谢,

麦克

1 个答案:

答案 0 :(得分:1)

有一部分称为验证的铁轨正在进行中。文档在这里:link。为了让你基本上设置,你可以:

# award.rb
class Award < ActiveRecord::Base
  validates_uniqueness_of :user_id, :recipe_id
end

# awards_controller.rb
def create
  @award = current_user.awards.build(award_params)
  if @award.save
    flash[:success] = 'Award Given!'
    redirect_to recipe_path(params[:recipe_id])
  else
    flash[:error] = 'There was an error awarding this award!'
    render 'static_pages/home'
  end
end