在设计导轨

时间:2016-05-31 18:36:38

标签: ruby-on-rails devise account

对下面的情况做了很多阅读。想要一些意见。

在(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

1 个答案:

答案 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