对下面的情况做了很多阅读。想要一些意见。
在(1)的主题中,用户询问"如何在Rails的注册表单中创建设计用户时创建另一个对象?"。这正是我想要做的。当用户注册我想创建一个Account对象时。
(1)How to create another object when creating a Devise User from their registration form in Rails?
然而,我遇到了一个问题,这个问题也出现在参考线程中。当我在我的子类注册控制器中运行以下内容时。我得到"在分配属性时,你必须传递一个哈希作为一个参数。" RegistrationsController中的ArgumentError #create。
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参数转到Account的user_id外键。仍然是相同的错误&#34;在分配属性时,您必须传递哈希作为参数。&#34;
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
答案 0 :(得分:1)
在你的user.rb文件中,你可以这样做:
after_create :create_account
def create_account
@user = User.last
@account = Account.new
@user.account = @account
@user.save
@account.save
end