压倒一切的设计注册创建方法(Overriding Devise Registration Creat

2019-06-23 13:41发布

我要专门设置一个字段创建用户时。 我有

class RegistrationsController < Devise::RegistrationsController
  def create
    super
    @user.tag_list = params[:tags]
  end
end

我有检查通过标签参数框和我的标签参数被传递服务器日志中已经验证。 然而,当我在控制台呼叫@ user.tag_list我只是得到了一个空白的响应[]

我觉得问题出在我的色器件的制作方法的操纵。 我还没有明确设定@user任何地方,但我不知道如何利用设计来设置。 有谁知道如何利用设计时设置一个特定的领域?

Answer 1:

对于任何人谁发现这一点的同时寻找如何重写设计方法备查,大部分的设计方法接受一个块,所以这样的事情应该工作以及:

class RegistrationsController < Devise::RegistrationsController
  def create
    super do
        resource.tag_list = params[:tags]
        resource.save
    end
  end
end


Answer 2:

而不是使用的super调用设计:: RegistrationsController的创建行动,与更换设计:: RegistrationsController的创建方法的实际代码

build_resource
resource.tag_list = params[:tags]   #******** here resource is user 
if resource.save
  if resource.active_for_authentication?
    set_flash_message :notice, :signed_up if is_navigational_format?
    sign_in(resource_name, resource)
    respond_with resource, :location => after_sign_up_path_for(resource)
  else
    set_flash_message :notice, :"signed_up_but_#{resource.inactive_message}" if is_navigational_format?
    expire_session_data_after_sign_in!
    respond_with resource, :location => after_inactive_sign_up_path_for(resource)
  end
else
  clean_up_passwords resource
  respond_with resource
end


Answer 3:

如果你不希望重写create方法的全部代码,你可以简单地设置保护法里面的资源变量 设计:: RegistrationsController,被保存的资源之前,这就是所谓的build_resource。

protected 

# Called before resource.save
def build_resource(hash=nil)
  super(hash)
  resource.tag_list = params[:tags]
end


文章来源: Overriding Devise Registration Create Method