[英]Using after_action to create account after a Devise registration for rails
对以下情况进行了大量阅读。 想要一些意见。
在 (1) 的线程中,用户询问“如何在从 Rails 中的注册表单创建设计用户时创建另一个对象?”。 这也正是我正在努力做的。 当用户注册时,我想创建一个 Account 对象。
(1) 在 Rails 中从注册表创建设计用户时如何创建另一个对象?
但是,我遇到了一个问题,它也出现在引用的线程中。 当我在我的子类注册控制器中运行以下内容时。 我得到“分配属性时,您必须将哈希作为参数传递。” RegistrationsController#create 中的 ArgumentError。
class RegistrationsController < Devise::RegistrationsController
after_action :create_account, only: [:create, :update]
private
def create_account
Account.create(@user)
end
end
事实证明,使用回调不起作用,因为我无权访问 params 哈希。 我已经尝试了 Account.create(current_user) 或 (@user) 的许多不同变体,并在下面添加了另一个 def 以尝试允许用户 ID 参数转到帐户的 user_id 外键。 仍然是同样的错误“分配属性时,您必须将散列作为参数传递。”
def account_params
params.require(:account).permit(:user_id,:user)
end
这就是(1)中的问题结束的地方。 它建议绕过 Devise 的 RegistrationsController。
当用户在 Devise 中注册时,这是实现创建其他模型目标的唯一剩余方法吗? 还有其他建议吗? 我不想承诺绕过注册控制器,除非这是唯一的方法。
感谢您的任何建议,并乐意提供任何其他信息。
class Account < ApplicationRecord
has_many :users
end
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_many :projects
has_many :notes
belongs_to :account
在你的 user.rb 文件中,你可以这样做:
after_create :create_account
def create_account
@user = User.last
@account = Account.new
@user.account = @account
@user.save
@account.save
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.