我正在创建一个简单的用户注册功能,并让用户输入名字、姓氏和电子邮件。电子邮件字段对所有用户都应该是唯一的。我已经在 db 中给出了这个约束。但是在代码中,当输入包含重复电子邮件的行时,它不会在数据库中创建一行,但也不会引发任何异常。我对如何向用户显示错误感到困惑。
My code:
table creation script:
CREATE TABLE customers (id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(id), firstname VARCHAR(25), lastname VARCHAR(25), email VARCHAR(50), UNIQUE KEY(email), password VARCHAR(50));
def self.create_new(params)
begin
customer = Customer.create!(:firstname=>params[:firstname], :lastname => params[:lastname], :email => params[:email], :password => params[:password])
return {:success => true, :message => "success", :id => customer.id }
rescue => e
return {:success => false, :message => e.message}
end
end
我是否应该在模型级别添加唯一性验证来实现它?
最佳答案
您已经添加了数据库支持的验证,它正在运行。现在您应该在您的模型中添加显式验证(如您所建议的那样),以便它抛出异常说明错误。
因此,将 validates :email, uniqueness: true
添加到模型中会达到您的预期。
关于mysql - 带有 sinatra 和 activerecord mysql db 重复错误的 Ruby 没有作为异常引发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29694195/