skip_before_action和Rails 5

时间:2016-09-22 19:11:56

标签: ruby-on-rails ruby rspec ruby-on-rails-5

我刚刚升级到Rails 5并且一切都很顺利但是没有明显的理由在skip_before_action之后调用的方法不允许rspec与此消息一起运行

  

在process_action回调之前:尚未定义redirect_heroku_user(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

2 个答案:

答案 0 :(得分:24)

根据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

答案 1 :(得分:4)

在Rails 5中,如果方法$scope.promoFilter = function(promo_expiration) { function promosFilteredBy(promo_expiration) { return $scope.promos.filter(function(promo) { return moment(promo_expiration).isBefore(promo.Expiration_Date); }); } $scope.addPromos = promosFilteredBy(promo_expiration); }; 未在同一个控制器中定义,则会引发此异常。

您可以传递redirect_heroku_user以避免mentioned here

raise: false