155

Any idea on how to create and save a new User object with devise from the ruby console?

When I tried to save it, I'm getting always false. I guess I'm missing something but I'm unable to find any related info.

2
  • 1
    Not an answer to your question, and you probably already know about Railcasts, but I found these video's useful when learning about Devise: railscasts.com/episodes/209-introducing-devise, railscasts.com/episodes/210-customizing-devise. They have a few more really useful videos about Devise on there too. Good luck. Commented Nov 30, 2010 at 19:08
  • 2
    Yea i watched them both, but they don't say anything about what i'm asking. Commented Dec 6, 2010 at 14:40

5 Answers 5

206

You can add false to the save method to skip the validations if you want.

User.new({:email => "[email protected]", :roles => ["admin"], :password => "111111", :password_confirmation => "111111" }).save(false)

Otherwise I'd do this

User.create!({:email => "[email protected]", :roles => ["admin"], :password => "111111", :password_confirmation => "111111" })

If you have confirmable module enabled for devise, make sure you are setting the confirmed_at value to something like Time.now while creating.

Sign up to request clarification or add additional context in comments.

4 Comments

Looks like save(false) is depcreated, now should be save(:validate => false)
there is just so much magic happening here.. The User model extends Active Record. how come the create method is overriden. Where is the password being encrypted?
What does the devise call actually do
Seems like a wrong way of doing. This way of forcibly validating (or skipping validation) won't set the encrypted_password, hence making this record useless in the real app.
80

You should be able to do this using

u = User.new(:email => "[email protected]", :password => 'password', :password_confirmation => 'password')
u.save

if this returns false, you can call

u.errors

to see what's gone wrong.

2 Comments

If you use :confirmable, don't forget to also set :confirmed_at attribute to Time.now so you can log in right away.
As a shortcut, if you're using Confirmable, call u.confirm!
30

When on your model has :confirmable option this mean the object user should be confirm first. You can do two ways to save user.

a. first is skip confirmation:

newuser = User.new({email: '[email protected]', password: 'password', password_confirmation: 'password'})
newuser.skip_confirmation!
newuser.save

b. or use confirm! :

newuser = User.new({email: '[email protected]', password: 'password', password_confirmation: 'password'})
newuser.confirm!
newuser.save

Comments

7

If you want to avoid sending confirmation emails, the best choice is:

    u = User.new({
      email: '[email protected]',
      password: '12feijaocomarroz',
      password_confirmation: '12feijaocomarroz'
    })

    u.confirm
    u.save

So if you're using a fake email or have no internet connection, that'll avoid errors.

1 Comment

Update: confirm! is now just confirm
3

None of the above answers worked for me.

This is what I did:

User.create(email: "[email protected]", password: "asdasd", password_confirmation: "asdasd")

Keep in mind that the password must be bigger than 6 characters.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.