我想在User
保存Users::RegistrationsController < Devise::RegistrationsController
之前做点什么。
我可以使用像before_save
这样的回调方法,但它做了太多事情,因为我只想在RegistrationsController中使用它。
请参阅以下代码:
(这是Devise::RegistrationsController#create
)
def create
build_resource(sign_up_params)
resource.do_something_i_want # <= HERE
resource.save
yield resource if block_given?
if resource.persisted?
if resource.active_for_authentication?
set_flash_message! :notice, :signed_up
sign_up(resource_name, resource)
respond_with resource, location: after_sign_up_path_for(resource)
else
set_flash_message! :notice, :"signed_up_but_#{resource.inactive_message}"
expire_data_after_sign_in!
respond_with resource, location: after_inactive_sign_up_path_for(resource)
end
else
clean_up_passwords resource
set_minimum_password_length
respond_with resource
end
end
这似乎唯一的方法是复制&amp;将create
设计方法粘贴到Users::RegistrationsController
。
我可以更轻松地完成这项工作吗?
答案 0 :(得分:0)
rails中有多个回调。您可以查看here。在你的情况下,下面将工作正常。要覆盖控制器,您需要进行多项更改。
before_create :do_something
before_save :do_something, on: :create
after_validation :do_something, on: :create
答案 1 :(得分:0)
您可以覆盖create method和
def create
super.create do |res|
res.do_something_i_want
end
end
由于:如果block_given产生资源? 然而,它是你需要的一行之后的一行。 (保存后)
我不喜欢在保存之前回调after_save /,因为你最终可以在几乎无法控制的情况下添加过于匹配的逻辑。还有一些情况你不想打电话给你的回调。