如何避免错误 - >双重输入

时间:2011-05-05 09:25:45

标签: mysql sql ruby-on-rails

表用户(包含id,username,password,is_admin)

我的控制器(我添加的地方)

  def create
    @user = User.new(params[:respondent])
#   entered     = User.find(:all, :conditions => ["email = ?", @user])
    render :json => @user.to_ext_json(:success => @user.save)
    return false 
  end

当我粘贴同一封电子邮件时,我得到了这个:

pre>Mysql::Error: Duplicate entry 'sam@sa.com' for key 'email': INSERT INTO `users` (`created_at`, `updated_at`, `email`) VALUES('2011-05-05 09:05:57', '2011-05-05 09:05:57', 'sam@sa.com')</pre>

如何避免这种情况?我应该在控制器中写什么(有些如果?)

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以验证模型中的唯一性

validates :email, :uniqueness => :true

或者您可以在控制器中拯救RecordNotUnique,如此

begin
  # create user
rescue ActiveRecord::RecordNotUnique => e
  # handle duplicate entry
end

答案 1 :(得分:1)

你不应该在控制器中这样做。这些是您应该在模型中进行的验证。请仔细阅读this guide以了解如何解决此问题。