我是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,什么也没有发生,我查看数据库( good.but ),甚至最后一次更新日期都没有改变。
我注意到的另一件有趣的事情是当我使用
User.create(:name=>"abcd",:email=>"svsvenu@gmail.com"),
很多时候,每次我在控制台中运行它时,都会创建一条记录。
有人能解释一下为什么我的保存不起作用吗?为什么我的唯一性约束被忽略了?
提前感谢
发布于 2011-10-13 15:49:09
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
有验证错误(比如重复的电子邮件)并且没有保存,您会看到一个异常。
https://stackoverflow.com/questions/7756752
复制