【问题标题】:Rails 4.1 Devise 3.3 column users.password does not existRails 4.1 设计 3.3 列 users.password 不存在
【发布时间】:2014-08-26 03:16:38
【问题描述】:

我想通过控制台手动创建用户:

User.find_or_create_by(email: "user@mail.com", first_name: "Stan", last_name: "Smith", password: "password", password_confirmation: "password", confirmed_at: Time.now)

我在过去的项目中已经多次这样做了,但这次没有成功。它没有获取设计密码模型属性,所以这是我得到的错误:

PG::UndefinedColumn: ERROR:  column users.password does not exist

我有 Rails 4.1.4 和 Devise 3.3.0。最新版本有什么变化吗?

谢谢。

【问题讨论】:

    标签: ruby-on-rails ruby devise


    【解决方案1】:

    您应该使用User.create,而不是User.find_or_create_by

    Devise 在创建时接受密码和密码确认,但实际表只有一个名为 encrypted_password 的列。

    User.find_or_create_by 的“查找”部分正在寻找一个名为“密码”的列,该列不存在。

    【讨论】:

    • 是的,你是对的!它现在工作了:) 谢谢。它曾经在 Rails 4.0.2 中工作。我猜他们改变了一些东西。
    • 没问题,乐于助人!
    • @AJGregory 如果不小心多次创建/播种,这会创建多个但相同的用户吗?因为我认为find_or_create_by 的目的正是为了避免这种情况。
    • @wlnirvana 这取决于一些事情,例如是否有模型验证来防止重复。否则,请参阅 Sharvy Ahmed 对此问题的回答以了解另一种方法。
    【解决方案2】:

    如果你想使用find_or_create_by,它接受块:

    User.find_or_create_by(email: "user@mail.com", first_name: "Stan", last_name: "Smith") do |user|
      user.password = "password"
      user.confirmed_at = Time.now
    end
    

    【讨论】:

    • 天哪,这正是我在过去 18 个月的 Rails 开发中一直在寻找的东西!感谢分享?(为了我的钱,这应该是最佳答案)
    猜你喜欢
    • 2016-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-22
    • 1970-01-01
    • 1970-01-01
    • 2014-02-08
    • 2014-07-06
    相关资源
    最近更新 更多