Ruby on rails 在使用designe保存之前设置模型

Ruby on rails 在使用designe保存之前设置模型,ruby-on-rails,devise,Ruby On Rails,Devise,我正在RoR项目中使用Desive for我的用户模型 我的用户模型属于计划(基本、爱好、专业等) 我有一个RegistrationController来控制新用户的注册。像这样: class RegistrationsController < Devise::RegistrationsController 我不知道我可以添加这部分代码的方法。因为这是设计出来的 有人能帮我吗 您的设计模型由ActiveRecord支持(最有可能),因此您可以访问所有ActiveRecord生命周期挂钩,

我正在RoR项目中使用Desive for我的用户模型

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

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

class RegistrationsController < Devise::RegistrationsController
我不知道我可以添加这部分代码的方法。因为这是设计出来的


有人能帮我吗

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

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
class用户
您可以在
用户
模型上保存回调之前在
中添加计划,而不是在用户控制器中处理它。另一种方法是将
计划id
添加到设计参数中,如中所述。这将在保存用户模型时直接保存计划。我这样做了(并添加了一些调试行puts)并且从未调用过assign_plan。这很奇怪——那么肯定还有其他事情在进行。Desive通过ActiveRecord支持这些回调:。用户是否正确保存?在此之前,只有验证通过时才会进行保存,因此,如果用户出现错误,您将无法看到打印语句,因为它永远不会被调用。另外,请确保使用spring stop/spring start,以防在看不到新代码时出现缓存问题。这里的问题是,我的用户属于一个计划。我不知道验证是在之前还是之后进行的,但是,如果我检查错误,在rails控制台中,它会说:“@messages={:plan=>[”必须存在“]},@details={:plan=>[{{:error=>:blank}]}>”啊,好了。所以看起来您的用户模型上有一个validates\u presence\u:plan。由于在验证运行之后分配计划失败,因此它将永远不会保存用户,也永远不会触发回调。删除该验证并再次尝试将保存之前的
更改为验证之前的
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