从Ruby控制台创建设计用户

Mar*_*tin 140 ruby ruby-on-rails devise

有关如何使用ruby控制台设计和保存新User对象的任何想法?

当我试图保存它时,我总是假的.我想我错过了一些东西,但我找不到任何相关的信息.

jsp*_*ner 187

如果需要,可以向save方法添加false以跳过验证.

User.new({:email => "guy@gmail.com", :roles => ["admin"], :password => "111111", :password_confirmation => "111111" }).save(false)
Run Code Online (Sandbox Code Playgroud)

否则我会这样做

User.create!({:email => "guy@gmail.com", :roles => ["admin"], :password => "111111", :password_confirmation => "111111" })
Run Code Online (Sandbox Code Playgroud)

如果您confirmable为设计启用了模块,请确保将confirmed_at值设置为Time.now创建时的值.

  • 看起来像save(false)是depcreated,现在应该是save(:validate => false) (49认同)
  • 这里发生了太多的魔术..用户模型扩展了Active Record.为什么创建方法被覆盖.密码在哪里被加密? (9认同)
  • 设计实际上做了什么 (2认同)

Sam*_*hie 74

你应该可以使用

u = User.new(:email => "user@name.com", :password => 'password', :password_confirmation => 'password')
u.save
Run Code Online (Sandbox Code Playgroud)

如果返回false,则可以调用

u.errors
Run Code Online (Sandbox Code Playgroud)

看看出了什么问题.

  • 如果您使用:确认,请不要忘记将:confirmed_at属性设置为Time.now,以便您可以立即登录. (16认同)
  • 作为捷径,如果你使用`Confirmable`,请调用`u.confirm!` (9认同)

akb*_*bin 27

当您的模型具有:确认选项时,这意味着对象用户应首先确认.您可以通过两种方式来保存用户.

一个.首先是跳过确认:

newuser = User.new({email: 'superadmin1@testing.com', password: 'password', password_confirmation: 'password'})
newuser.skip_confirmation!
newuser.save
Run Code Online (Sandbox Code Playgroud)

湾 或使用确认!:

newuser = User.new({email: 'superadmin2@testing.com', password: 'password', password_confirmation: 'password'})
newuser.confirm!
newuser.save
Run Code Online (Sandbox Code Playgroud)


Fla*_*che 6

如果您想避免发送确认电子邮件,最好的选择是:

    u = User.new({
      email: 'demo@greenant.com.br',
      password: '12feijaocomarroz',
      password_confirmation: '12feijaocomarroz'
    })

    u.confirm
    u.save
Run Code Online (Sandbox Code Playgroud)

因此,如果您使用的是假电子邮件或没有互联网连接,那么就可以避免错误.