สร้างผู้ใช้ประดิษฐ์จากคอนโซล Ruby


146

มีความคิดเกี่ยวกับวิธีการสร้างและบันทึกวัตถุผู้ใช้ใหม่ด้วยประดิษฐ์จากคอนโซลทับทิม?

เมื่อฉันพยายามที่จะบันทึกฉันจะได้รับเท็จเสมอ ฉันเดาว่าฉันขาดอะไรบางอย่างไป แต่ฉันไม่พบข้อมูลที่เกี่ยวข้อง


1
ไม่ได้คำตอบสำหรับคำถามของคุณและคุณอาจจะรู้อยู่แล้วว่าเกี่ยวกับ Railcasts แต่ผมพบว่าวิดีโอเหล่านี้มีประโยชน์เมื่อการเรียนรู้เกี่ยวกับการประดิษฐ์: railscasts.com/episodes/209-introducing-devise , railscasts.com/episodes/210-customizing-devise พวกเขามีวิดีโอที่มีประโยชน์มากเกี่ยวกับ Devise อยู่ที่นั่นด้วย โชคดี.

2
ใช่ฉันดูพวกเขาทั้งสอง แต่พวกเขาไม่ได้พูดอะไรเกี่ยวกับสิ่งที่ฉันขอ
Martin

คำตอบ:


197

คุณสามารถเพิ่ม false ให้กับวิธีการบันทึกเพื่อข้ามการตรวจสอบถ้าคุณต้องการ

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

มิฉะนั้นฉันจะทำสิ่งนี้

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

หากคุณมีconfirmableโมดูลที่เปิดใช้งานสำหรับการวางแผนตรวจสอบให้แน่ใจว่าคุณกำลังตั้งconfirmed_atค่าเป็นสิ่งที่ต้องการTime.nowในขณะที่สร้าง


51
ดูเหมือนว่าการบันทึก (false) ถูกยกเลิกแล้วตอนนี้ควรบันทึก (: validate => false)
Martin

9
มีสิ่งมหัศจรรย์เกิดขึ้นมากมายที่นี่ .. โมเดลผู้ใช้ขยาย Active Record วิธีการสร้างเป็นวิธีการ overriden รหัสผ่านที่ถูกเข้ารหัสอยู่ที่ไหน
codeAnand

2
การเรียกผู้ประดิษฐ์ทำอะไรได้จริง
codeAnand

ดูเหมือนว่าวิธีการทำผิด วิธีการบังคับใช้การตรวจสอบความถูกต้อง (หรือการข้ามการตรวจสอบความถูกต้อง) นี้จะไม่ตั้งค่า encrypt_password ดังนั้นการบันทึกนี้จึงไร้ประโยชน์ในแอปจริง
VPaul

79

คุณควรทำสิ่งนี้โดยใช้

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

ถ้านี่กลับเท็จคุณสามารถโทร

u.errors

เพื่อดูว่ามีอะไรผิดปกติ


17
หากคุณใช้: ยืนยันได้อย่าลืมตั้งค่าด้วย: confirm_at คุณลักษณะเป็น Time.now เพื่อให้คุณสามารถเข้าสู่ระบบได้ทันที
David Sulc

9
ถ้าคุณใช้ทางลัดConfirmableโทรu.confirm!
captainpete

30

เมื่ออยู่ในแบบจำลองของคุณ: ตัวเลือกที่ยืนยันได้ซึ่งหมายความว่าผู้ใช้วัตถุควรได้รับการยืนยันก่อน คุณสามารถทำสองวิธีในการบันทึกผู้ใช้

แรกคือข้ามการยืนยัน:

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

ข หรือใช้ยืนยัน! :

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

6

หากคุณต้องการหลีกเลี่ยงการส่งอีเมลยืนยันทางเลือกที่ดีที่สุดคือ:

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

    u.confirm
    u.save

ดังนั้นหากคุณใช้อีเมลปลอมหรือไม่มีการเชื่อมต่ออินเทอร์เน็ตนั่นจะเป็นการหลีกเลี่ยงข้อผิดพลาด


อัปเดต: confirm!ตอนนี้เป็นเพียงconfirm
Shadow Radiance

2

คำตอบข้างต้นไม่เหมาะกับฉัน

นี่คือสิ่งที่ฉันทำ:

User.create(email: "a@a.com", password: "asdasd", password_confirmation: "asdasd")

โปรดทราบว่ารหัสผ่านจะต้องมากกว่า 6 ตัวอักษร

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.