在Devise中为新创建的用户添加一个空的嵌套对象

时间:2017-06-27 14:42:58

标签: ruby-on-rails devise

我在使用Devise的Rails 5应用程序中有一个用户模型。

我也有一个关系:用户belongs_to帐户。

现在,当我创建一个新用户时,我想自动为它创建一个新的空帐户。

我已经拥有了我的注册控制器和方法:

  def create
    super
  end

我想做这样的事情:

  def create
    super
    user.account.create()
  end

2 个答案:

答案 0 :(得分:0)

在设计控制器中,默认情况下将用户对象称为resource。所以这样的事情会起作用:

def create
  super
  if resource.persisted? # user has been created with no errors
    resource.account.create # assuming it will pass validations without arguments
  end
end

另一种方式,正如@ julien-js所提到的,是在创建后的钩子中创建帐户,但是你可以使用after_commit(read more about the difference)代替after_create:

after_commit :create_account, on: :create

def create_account
  self.account.create unless self.account.present?
end

答案 1 :(得分:0)

你在寻找类似的东西吗?

在您的模型User.rb

after_create do
  self.account = Account.create()     if self.account.nil?
end