【问题标题】:Adding devise_invitable gem into existing devise将 devise_invitable gem 添加到现有设计中
【发布时间】:2018-04-20 10:57:00
【问题描述】:

我在我的 RoR 网络应用程序上使用 devise 进行用户身份验证,我还想使用“devise_invitable”gem 向朋友发出邀请。我按照文档进行操作,但在单击“发送邀请电子邮件”按钮时出现错误。 click to see devise_invatable gem

到目前为止我所做的是:

  1. 添加 devise_invitable gem

  2. 在现有设计用户模型中添加 :invitable 标志

设计 :invitable, :database_authenticable, :registerable, :recoverable, :rememberable, :trackable, :validatable

  1. 将 DeviseInvitable 添加到我的“用户”表中

    def change
    add_column :users, :invitation_token, :string
    add_column :users, :invitation_created_at, :datetime
    add_column :users, :invitation_sent_at, :datetime
    add_column :users, :invitation_accepted_at, :datetime
    add_column :users, :invitation_limit, :integer
    add_column :users, :invited_by_id, :integer
    add_column :users, :invited_by_type, :string
    add_index :users, :invitation_token, :unique => true
    
    change_column_null :users, :encrypted_password, :string, true
    

    结束

错误信息如下所示:

PG::NotNullViolation: ERROR: null value in column "first_name" violates not-null constraint DETAIL: Failing row contains (3, null, null, null, little@sheep.com, $2a$11$BcpZUt1rFlj85gdhj3F.ReTDOFNIy1FaV8cyco0gITa2TyQu7/oJy, null, null, null, 0, null, null, null, null, 2017-11-07 21:37:44.031886, 2017-11-07 21:37:44.031886, null, 4d51bd86a5cf613f64aaf0b1e0920f87441f04f7b62f4b3abcbee12ae061e806, 2017-11-07 21:37:44.030662, 2017-11-07 21:37:44.030662, null, null, 1, User). : INSERT INTO "users" ("email", "encrypted_password", "created_at", "updated_at", "invitation_token", "invitation_created_at", "invitation_sent_at", "invited_by_id", "invited_by_type") VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9) RETURNING "id"

【问题讨论】:

    标签: ruby-on-rails devise


    【解决方案1】:

    检查您的schema.rb 表users。

    你会看到它有一个列first_name,约束为null:false

    这是我从您的日志消息中检索到的您的用户

    3, null, null, null, little@sheep.com, $2a$11$BcpZUt1rFlj85gdhj3F.ReTDOFNIy1FaV8cyco0gITa2TyQu7/oJy, null, null, null, 0, null, null, null, null, 2017-11-07 21:37:44.031886, 2017-11-07 21:37:44.031886, null, 4d51bd86a5cf613f64aaf0b1e0920f87441f04f7b62f4b3abcbee12ae061e806, 2017-11-07 21:37:44.030662, 2017-11-07 21:37:44.030662, null, null, 1, User
    

    3 是用户id,而null 值之一将是first_name

    使用此 gem,您在 users 表中添加了列,当您发送邀请时,您希望通过 inserting 更新该行,表中的以下详细信息

    row 是带有id=3 的那个,所以它已经存在

    INSERT INTO "users" ("email", "encrypted_password", "created_at", "updated_at", "invitation_token", "invitation_created_at", "invitation_sent_at", "invited_by_id", "invited_by_type") VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9) RETURNING "id"
    

    当 db 尝试保存更改时会触发错误,请尝试使用 rails c 打开 rails 控制台并更新该记录。

    user = User.find(3)
    user.first_name = 'random name'
    user.save
    

    然后用相同的记录再试一次

    【讨论】:

    • 感谢您的回答,我删除了数据库中的空约束并且它起作用了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 2016-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多