Devise控制器中“产生资源”的作用是什么?

我正在查看Devise代码并注意到大多数控制器都会产生正在创建的资源。

class Devise::RegistrationsController < DeviseController # ... def create build_resource(sign_up_params) resource.save yield resource if block_given? # ... 

这必须是某种可扩展性function,但我真的不知道如何将块传递给控制器​​操作?

注意:这个问题是关于如何在Rails请求周期中实际执行的操作,而不是关于Ruby中的块如何工作。

它允许子类重用devise提供的create实现,但能够挂钩进程。

例如,你可能有类似的东西

 class MyRegistrations < Devise::RegistrationsController def create super { |resource| ... } end end