【问题标题】:Add an empty nested object to newly created user in Devise在设计中向新创建的用户添加一个空的嵌套对象
【发布时间】:2017-06-28 00:30:56
【问题描述】:

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

我也有一个关系:user belongs_to account。

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

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

  def create
    super
  end

我想做这样的事情:

  def create
    super
    user.account.create()
  end

【问题讨论】:

  • 您可以做的一件事是 Account.create(user_id: @user.id)。也许是类似的东西。

标签: ruby-on-rails devise


【解决方案1】:

你在寻找类似的东西吗?

在您的模型 User.rb 中

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

【讨论】:

    【解决方案2】:

    在设计控制器中,用户对象默认称为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-create 挂钩中创建帐户,但可以使用 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-29
      • 2017-02-25
      • 2022-01-07
      • 1970-01-01
      相关资源
      最近更新 更多