special_method
我正在使用设计,如果用户模型更新成功,我想添加一个。下面是我继承的registrationsController的源代码。
我只想添加一行,special_method
即注释的方法。
类设计::注册控制器 < 设计控制器
def update
self.resource = resource_class.to_adapter.get!(send(:"current_#{resource_name}").to_key)
prev_unconfirmed_email = resource.unconfirmed_email if resource.respond_to?(:unconfirmed_email)
if resource.update_with_password(account_update_params)
# Where I want to run `special_method` on my updated user
if is_navigational_format?
flash_key = update_needs_confirmation?(resource, prev_unconfirmed_email) ?
:update_needs_confirmation : :updated
set_flash_message :notice, flash_key
end
sign_in resource_name, resource, :bypass => true
respond_with resource, :location => after_update_path_for(resource)
else
clean_up_passwords resource
respond_with resource
end
end
在我的控制器中写这个的最好方法是什么?下面的代码是最简洁的方式,还是有办法进一步精简?
类 RegistrationsController < 设计::RegistrationsController
def update
self.resource = resource_class.to_adapter.get!(send(:"current_#{resource_name}").to_key)
prev_unconfirmed_email = resource.unconfirmed_email if resource.respond_to?(:unconfirmed_email)
if resource.update_with_password(account_update_params)
resource.special_method
super
else
super
end
end
编辑:所以我上面的示例代码不起作用,因为它依赖于 Devise::RegistrationsController 中的受保护方法。这又依赖于不同设计控制器中的另一种方法。如何在不覆盖原始控制器/帮助文件的情况下访问这些方法?
澄清,
我的控制器有一个
update
方法,其中包含一个account_update_params
方法。Devise::RegistrationsController 有一个受保护的
account_update_params
方法,其中包括一个devise_parameter_sanitizer
方法Devise::Controllers::Helpers 有一个
devise_parameter_sanitizer
方法可以创建 Devise::ParameterSanitizer 和 Devise::BaseSanitizer 的新实例
有没有一种简单的方法可以访问这些方法,或者绕过将它们包含在我的代码中super
?