繁体   English   中英

在为 Rails 注册 Devise 后使用 after_action 创建帐户

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM