gpt4 book ai didi

ruby-on-rails - 如何在设备注册后创建模型

转载 作者:行者123 更新时间:2023-12-01 22:36:28 25 4
gpt4 key购买 nike

我有一个用户注册,其中包含一个名为“company_name”的额外字段。创建用户后,我希望根据额外字段“company_name”和与公司关联的用户创建一个 Company 实例。我已经尝试过一些这样的事情:

class RegistrationsController < Devise::RegistrationsController
def new
super
end

def create
super
company = Company.create(name: params[:company_name])
current_user.admin = true
current_user.company = company
current_user.save
end

def update
super
end
end

但是,在我创建公司后尝试执行这些操作时,我没有 current_user。有更好的方法吗?

最佳答案

您可以将一个 block 传递给 Devise Controller 的 create,它将为您提供已创建的用户资源:

class RegistrationsController < Devise::RegistrationsController
CREATE_COMPANY_PARAMS = [:name]

def create
super do |created_user|
if created_user.id
company = Company.create! create_company_params
created_user.update! company_id: company.id
end
end
end

private

def create_company_params
params.require(:user).require(:company).permit(*CREATE_COMPANY_PARAMS)
end
end

不过,要正确处理这个问题还有一些困难的部分。似乎即使用户已经存在,它仍会调用您的 block 并向您传递一个用户,但该用户不会分配 id 因为数据库保存失败。 if created_user.id 检查可防止为无效用户创建公司。

如果公司已经存在。 .create! 将引发异常,导致 Controller 返回 HTTP 422。

关于ruby-on-rails - 如何在设备注册后创建模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22432598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com