mysql - 带有 sinatra 和 activerecord mysql db 重复错误的 Ruby 没有作为异常引发

标签 mysql ruby activerecord sinatra

我正在创建一个简单的用户注册功能,并让用户输入名字、姓氏和电子邮件。电子邮件字段对所有用户都应该是唯一的。我已经在 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/

相关文章:

mysql - 为什么 ActiveRecord 在从数组中删除对象时要尝试删除与对象对应的行?

ruby-on-rails - Rails:ActiveRecord::AssociationTypeMismatch 错误

mysql - 'posts' 和 'postmeta' WordPress 表的嵌套连接查询

mysql - 按列排序应该有索引吗?

ruby - 处理 Node.js 中子 shell 的输出

ruby-on-rails - ActiveRecord 是否已经将手动查询包装到事务中?

php - 在下拉列表中选择 True 或 False 应在 mysql 表中反射(reflect)为 o 和 1

MySQL 替换给定域的 .html 链接

Ruby rake 任务线程优化

ruby-on-rails - 如何优雅地对 'nested' 哈希值进行 symbolize_keys