每个新用户必须接受EULA才能使用我的RoR应用程序提供的服务,因此当用户第一次登录我的网站时,他/她必须接受EULA,如果他/她不想要接受,他/她可以退出,所以:
我的before_filter
中ApplicationController
有一个:except
动作:
before_filter :check_eula, :except => [:destroy]
我的EULA页面上有链接:
<%= link_to('Logout', destroy_user_session_path, :method => :delete, :class => link_class) %>
我正在使用Devise: https://github.com/plataformatec/devise/blob/master/lib/devise/rails/routes.rb
destroy_user_session DELETE /users/sign_out {:controller=>"devise/sessions", :action=>"destroy"}
问题在于,当用户点击“退出”链接而不接受EULA时,似乎仍会调用:check_eula
。
答案 0 :(得分:2)
我不知道为什么以下是有效的,但这是解决方案:
在config/application.rb
:
config.to_prepare do
# ...
Devise::SessionsController.skip_before_filter :check_eula, :only => [:destroy]
end
参考:
How to skip a before_filter for Devise's SessionsController?