Ruby 使用 sinatra 和 activerecord mysql 数据库重复错误未作为异常引发
Ruby with sinatra and activerecord mysql db duplicate error not getting raised as exception
我正在创建一个简单的用户注册功能并让用户输入名字、姓氏和电子邮件。电子邮件字段对所有用户都应该是唯一的。我已经在 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
添加到模型中会达到您的预期。
我正在创建一个简单的用户注册功能并让用户输入名字、姓氏和电子邮件。电子邮件字段对所有用户都应该是唯一的。我已经在 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
添加到模型中会达到您的预期。