【发布时间】:2014-08-14 13:44:53
【问题描述】:
我为 Devise 创建了一个自定义注册控制器。我在我的表单中插入了一个参数,如果它是真的,我应该在注册后做一些额外的事情,例如,为用户创建一个相关的公司。
class RegistrationsController < Devise::RegistrationsController
before_filter :authenticate_user!, :only => :token
def new
super
end
def create
super
reg_type = params['reg_type']
if reg_type=='1'
current_user.create_default_company!
end
end
def update
super
end
end
但是,我的 current_user 将为零。
undefined method `create_default_company!' for nil:NilClass
在调用 super 之后,我可以使用什么来立即引用 current_user,从而创建用户。
参数:
Parameters: {"utf8"=>"✓", "authenticity_token"=>"E1urosfkmekwweklo/HZaEVrrmxQVKO9E=", "user"=>{"name"=>"", "email"=>"4@Gmail.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Sign up", "reg_type"=>"1"}
我正在传递参数,使用两个链接:
new_user_registration_path(reg_type: '0')
new_user_registration_path(reg_type: '1')
创建的动作取决于用户选择的链接。
【问题讨论】:
-
您显然是在 nil 上调用该方法,因为 current_user 为 nil(如果他还没有创建/签名,怎么可能是其他方式?)。您可以在 after_create 回调中检查此参数,然后创建默认公司
-
我的印象是在create上调用super后,用户登录,用户就创建好了。是否有显示设计过程的参考资料?另外,reg_type 不是我的用户模型中的字段,也不是方法,我将如何创建一个 aftercreate 回调来引用 reg_type?我发布了我的参数
-
什么是reg_type,如果它不是字段也不是方法?
-
这只是我表单中的一个参数,告诉我以不同的方式处理创建。
-
hm,不知道如何访问注册参数..它是如何定义的?
标签: ruby-on-rails devise