使用devise保存之前设置模型

时间:2018-08-28 19:45:19

标签: ruby-on-rails devise

我在RoR项目中为我的User模型使用devise。

我的用户模型属于计划(基本,业余爱好,专业等)

我有一个RegistrationController来控制新用户的注册。像这样:

class RegistrationsController < Devise::RegistrationsController

创建新用户时(在检查重复性,密码规则等之后),我想向应用程序的每个新用户添加基本计划(由于与信用卡相关的业务规则等)

非常基本,我想要为每个用户创建类似以下内容的内容:

#forget about this hard coding on Plan
@user.plan = Plan.find(1) 

我不知道可以添加这部分代码的女巫方法。因为这是有意为之。

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:0)

您的设计模型由ActiveRecord支持(最有可能),因此您可以访问所有ActiveRecord生命周期挂钩,例如before_save。打开用户模型并输入:

class User < ActiveRecord::Base
  #...
  devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable
  #...
  before_save :assign_plan

  def assign_plan
    self.plan = Plan.find_by_name('basic').first
  end
  #...
end

答案 1 :(得分:0)

您可以将计划添加到before_save模型的User回调中,而不是在用户控制器中进行处理。另一种方法是将plan_id添加到https://jacopretorius.net/2014/03/adding-custom-fields-to-your-devise-user-model-in-rails-4.html中提到的设计参数中。保存用户模型后,这将直接保存计划