Gem devise 生成的 model 是否不能手工创建?

cdredfox · 2012年04月29日 · 最后由 cdredfox 回复于 2012年04月29日 · 2596 次阅读

之前碰到一个问题,一至以为是程序的写法有问题,详见:http://ruby-china.org/topics/2977

后来经过几次排查,猜测可能是因为 devise 引起的,于是我新建了一个 devise 的工程,一试,果然有问题。

问题主要如下:devise 生成的 model 是否不能通过手工创建呢? 我是新建的工程,没有做任何发动,只是增加了 devise 的 gem 在控制台输入如下命令:

 1.9.2p290 :005 > user=User.new
 => #<User id: nil, email: "", encrypted_password: "", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 0, current_sign_in_at: nil, last_sign_in_at: nil, current_sign_in_ip: nil, last_sign_in_ip: nil, created_at: nil, updated_at: nil> 
1.9.2p290 :006 > user.email='[email protected]'
 => "[email protected]" 
1.9.2p290 :007 > user.save
   (0.1ms)  begin transaction
  User Exists (0.2ms)  SELECT 1 FROM "users" WHERE "users"."email" = '[email protected]' LIMIT 1
   (0.1ms)  rollback transaction
 => false 
1.9.2p290 :008 > 

可以看到,save 的时候,提示记录已存在,但是实际上是没有任何记录的:

1.9.2p290 :008 > User.all
  User Load (0.6ms)  SELECT "users".* FROM "users" 
 => [] 
1.9.2p290 :009 > 

一般创建失败是没通过 validation,你可以通过user.errors来查看 你这个是因为少传了 password

#1 楼 @kenshin54 应该还缺少:password_confirmation

谢谢两位,果然是~

需要 登录 后方可回复, 如果你还没有账号请 注册新账号