skip_before_action 和 Rails 5

skip_before_action and Rails 5

我刚刚升级到 Rails 5,一切都很顺利,但没有明显的原因,在 skip_before_action 之后调用的方法不允许 rspec 到 运行这条消息

Before process_action callback :redirect_heroku_user has not been defined (ArgumentError)

这太奇怪了,因为它在 rails 4 上工作得很好。这是我的代码:

# application_controller.rb
def redirect_heroku_user
  redirect_to root_path if heroku_user?
end 

# some_controller.rb
skip_before_action :redirect_heroku_user, only: :edit

根据this thread

ActiveSupport::Callbacks#skip_callback now raises an ArgumentError if an unrecognized callback is removed.

所以你的解决方案是将 raise: false 选项传递给 skip_before_action:

skip_before_action :redirect_heroku_user, raise: false

有关详细信息,请参阅 changelog

在Rails 5中,如果方法redirect_heroku_user没有在同一个控制器中定义,那么它会抛出这个异常。

您可以通过 raise: false 来避免它,因为 mentioned here:

skip_before_action :redirect_heroku_user, only: :edit, raise: false