加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 在用户新设置注册时创建另一个模型

发布时间:2020-12-17 03:01:44 所属栏目:百科 来源:网络整理
导读:我正在使用 devise进行新的用户注册.在创建新用户之后,我还想为该用户创建配置文件. 我在registrations_controller.rb中的create方法如下: class RegistrationsController Devise::RegistrationsController def create super session[:omniauth] = nil unle
我正在使用 devise进行新的用户注册.在创建新用户之后,我还想为该用户创建配置文件.

我在registrations_controller.rb中的create方法如下:

class RegistrationsController < Devise::RegistrationsController
    def create
      super
      session[:omniauth] = nil unless @user.new_record?

      # Every new user creates a default Profile automatically
      @profile = Profile.create
      @user.default_card = @profile.id
      @user.save

    end

但是,它没有创建新的配置文件,也没有填写@ user.default_card的字段.如何在每个新用户注册时自动创建新的配置文件?

解决方法

我会将此功能放入用户模型的before_create回调函数中,因为它本质上是模型逻辑,不会添加另一个保存调用,而且通常更优雅.

您的代码无法正常工作的一个可能原因是@profile = Profile.create未成功执行,因为它验证失败或其他原因.这将导致@ profile.id为nil,因此@ user.default_card为nil.

以下是我将如何实现这一点:

class User < ActiveRecord::Base

  ...

  before_create :create_profile

  def create_profile
    profile = Profile.create
    self.default_card = profile.id
    # Maybe check if profile gets created and raise an error 
    #  or provide some kind of error handling
  end
end

在您的代码(或我的代码)中,您始终可以使用简单的放置来检查是否已创建新的配置文件.即puts(@profile = Profile.create)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读