rails字段上的唯一性约束ruby

时间:2011-10-13 15:41:41

标签: ruby-on-rails ruby unique

我是ROR的新手,并且一直试图通过mike hartl的教程(我可能会添加的优秀读物)来摸索我的方式。但是我有一些困难,我的用户模型如下所示。

class User < ActiveRecord::Base

    validates :name , :presence => true, :length => {:maximum => 50 }
    validates :email, :presence   => true,
                    :format     => { :with => email_regex },
                    :uniqueness => true
end

然后我使用rails -c打开ruby控制台并创建一个新用户

usr = User.new(:name=>"abcd",:email=>"svsvenu@gmail.com")

然后我使用

保存它
usr.save

这在我的数据库中创建了一条新记录。到目前为止一切都那么好。但如果我输入 usr.save 再一次,没有任何反应,我看看数据库(sqlite),甚至没有更改上次更新日期。

我注意到的另一个有趣的事情是当我使用

User.create(:name=>"abcd",:email=>"svsvenu@gmail.com"),

多次,每次在控制台中运行时都会创建一条记录。

有人可以解释为什么我的保存不起作用以及为什么我的唯一性约束被忽略了?

提前致谢

1 个答案:

答案 0 :(得分:2)

ActiveRecord足够聪明,可以理解当你连续两次输入usr.save时,第二个是多余的。

usr = User.new
usr.save # usr is saved (if it was valid)
usr.save # usr is already saved and unchanged!  do nothing.
usr.name = "bananas"
usr.save # usr name changed, commit the change!

当您说每次运行User.create时都在控制台中创建了用户时,您确定它们实际上是在创建吗?在控制台中,您会看到每次都返回User,但如果创建尝试中出现错误,则id将为nil。如果您运行create!,如果User有验证错误(如重复的电子邮件)并且未保存,则会看到异常。