【问题标题】:Rails 5 Devise Not Passing Username to Database on CreateRails 5 设计在创建时未将用户名传递给数据库
【发布时间】:2018-03-21 03:32:40
【问题描述】:

我在 Rails 5 中使用 Devise 设置了一个新应用程序,并在我的用户模型中添加了一个自定义字段“用户名”。我在数据库迁移中为用户名列添加了对 :username、presence: true 和非空规范的验证。

当我提交我的新用户表单时,它通过了模型上的用户名验证,但引发了 Postgres 数据库错误“'用户名'列中的空值违反非空约束”。

此外,当我尝试使用 User.create 在控制台中创建新用户时!({username: 'Test', email: 'test@gmail.com', password: '12345', password_confirmation: '12345' }) 它通过了模型验证,但在用户名列上抛出了空值的相同 Postgres 数据库错误。

这表明用户名被传递给模型进行验证,但没有被传递给数据库,因此 Postgres 接收到一个空值并抛出一个非空约束错误。

在使 Devise 能够接受用户模型上的自定义字段方面,我是否缺少步骤?我已按照谷歌搜索的所有说明进行操作,但我遇到的问题似乎与其他人遇到的不同。

【问题讨论】:

  • 只是为了测试一下,我从数据库列中删除了 not null 约束,并确认可以创建一个新用户,但用户名值没有传递到数据库,因此创建了一个值尽管通过了存在的模型验证,但为零:真。如何获取从模型传递到数据库的值?

标签: ruby-on-rails postgresql devise ruby-on-rails-5


【解决方案1】:

哇,我是个白痴。我有一个特殊的非 db 字段用于邀请代码,需要在 User 模型中使用 attr_accessor 才能使其工作,并且出于旧 Rails 时代的习惯,我将用户名添加到该 attr_accessor 中。突然从模型中删除用户名 attr_accessor 使一切恢复正常。呵呵!

【讨论】:

    猜你喜欢
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多