以下是我的带有before_action的控制器
class Admin::ApplicationController < ApplicationController
before_action :authenticate_admin!
#
# ....
#
end
class Admin::DashboardController < Admin::ApplicationController
def show
end
end
routes.rb中:
namespace :admin do
root :to => "dashboard#show" # to match the route /admin
end
我正在使用设计进行身份验证。与乘客5.0.23一起使用时的问题是当我第一次从浏览器访问/管理员而没有登录时,我被重定向到/ admins / sign_in这是完美的。如果我再次尝试访问/ admin,则无需登录,它会将我带到仪表板。所以before_action被忽略了。现在,如果我修改上述控制器中的任何一个或重新启动乘客,则before_action将再次用于对/ admin的立即请求,但不会用于后续请求。
我试过乘客5.0.15,它与另一个rails 4.1.5的应用程序一起正常工作,但它没有解决问题。我无法尝试将rails降级到4.1.5,因为它引发了很多其他错误。
当我使用webrick运行相同的上述应用程序时,before_action每次都能正常工作。
是否有人面临上述问题?知道上述问题可能是什么原因以及解决问题的任何建议?提前谢谢。
修改 当与webrick一起使用时,这个问题似乎也存在。我有2种类型的身份验证。一个用于用户,另一个用于管理员。随着webrick,问题在两个身份验证之间切换。如果before_action适用于authenticate_user !,它对authenticate_admin不起作用!反之亦然。与乘客一样,它既不适用也不适用。这似乎只发生在开发模式中。
答案 0 :(得分:0)
我想我找到了解决这个问题的方法。我将Admin :: ApplicationController重命名为Admin :: BaseController并在所有管理控制器中继承它。 before_filters现在按预期工作,但仍然不确定为什么使用Admin :: ApplicationController是错误的。是类名&#39; ApplicationController&#39;混淆了红宝石翻译?因为继承层次结构是:
from pandas import Series
x = Series([2.3,6.7,1.2,8.0,7.5])
print x
shift = x.shift(periods=-1)
print shift
0 6.7
1 1.2
2 8.0
3 7.5
4 NaN
dtype: float64
y = x[1:]
print y
1 6.7
2 1.2
3 8.0
4 7.5
dtype: float64
print y.corr(shift)
-0.397282761402
因此对于Admin :: DashboardController,似乎只有一个ApplicationController并忽略Admin :: ApplicationController。可能是!