如何将块传递给 Devise create 方法?

How do I pass a block to the Devise create method?

我正在使用 devise token auth(本质上只是使用 Devise)并且我试图在用户注册时保存之前修改 resource 对象。 create 方法,在源代码中定义并在用户文档中进行了解释,有一个 yield resource if block_given? 行,但是,以下代码没有按预期工作

class RegistrationsController < DeviseTokenAuth::RegistrationsController       
    def create                                                                 
          puts "this works"                                                    
          super do |resource|                                                  
            puts "this doesnt work"                                            
          end                                                                  
    end                                                                        
end                                                                            

知道为什么吗?

https://github.com/lynndylanhurley/devise_token_auth/blob/master/app/controllers/devise_token_auth/registrations_controller.rb

这个基础控制器没有块调用。

可能你的意思是https://github.com/plataformatec/devise/blob/master/app/controllers/devise/registrations_controller.rb

它有块调用,但它不会工作,因为 DeviseTokenAuth::RegistrationsController 不会将块传递给它。

你需要一些其他的方式来实现你想要的。

可能会将 DeviseTokenAuth::RegistrationsController 中的代码粘贴到您的自定义控制器,或者分叉 DeviseTokenAuth gem 并对其进行修补。

别忘了做 PR