在Rails(Devise,Pundit)中的过滤器之前升级Ruby休息

时间:2019-03-03 12:18:31

标签: ruby-on-rails ruby

我正在运行一个Rails应用程序,该应用程序将Ruby版本升级到2.5.1和2.6.0之后也停止了工作。我注意到这与在控制器的回调中传递一个块有关:

prepend_before_filter only: [:create, :destroy] { request.env["devise.skip_timeout"] = true }

失败,并显示错误:

syntax error, unexpected '{', expecting keyword_end
...ter only: [:create, :destroy] { request.env["devise.skip_tim

我的设置是:

devise (4.6.1)
rails 5.0.7
ruby 2.5.1
pundit 2.0.1

我将使用的Ruby版本升级到了2.6.0,出现了问题,然后下降到2.5.1,问题仍然存在

我还发现了这两个线程似乎在谈论类似的问题:https://github.com/plataformatec/devise/issues/4703 Rails 4 before_action, pass parameters to invoked method

我更新了Devis和Pundit,但没有任何运气:\

2 个答案:

答案 0 :(得分:2)

我建议使用prepend_before_filter替换不推荐使用的prepend_before_action并使用括号

 prepend_before_action(only: [:create, :destroy]) { request.env["devise.skip_timeout"] = true }

或使用do ... end块语法

prepend_before_action only: [:create, :destroy] do 
  request.env["devise.skip_timeout"] = true
end

答案 1 :(得分:0)

对于我来说,添加括号 ():

prepend_before_filter(only: [:create, :destroy]) { request.env["devise.skip_timeout"] = true }