before_filter :signed_in_user, only: [:index,:edit,:update] before_filter :correct_user, only: [:edit,:update]
两个不同的 Function 对同一个 Action 做 filter 的时候 是两个都做吗?还是以第一个为准?
我现在的问题是 访问 edit 和 update 这两个 Action 的时候 其实只走了第一个 filter
无论多少个都是会按定义的顺序依次执行的。
#1 楼 @zzhattzzh 刚才把整个 controller 的过程走了一遍 发现 filter 工作是正常的 我把 Session 打开 用 cookies 就 OK 用 Session 的时候 就会报错 感觉像是无法给变量赋值
module SessionsHelper def sign_in(user) ##cookies.permanent[:remember_token] = user.remember_token session[:current_user_id] = user.id session[:remember_token] = user.remember_token current_user = user end def current_user=(user) current_user = user end def current_user ##current_user ||= User.find_by_remember_token(cookies[:remember_token]) @current_user ||= User.find_by_id(session[:current_user_id]) end def current_user?(user) user == current_user end def signed_in? !current_user.nil? end def sign_out self.current_user = nil cookies.delete(:remember_token) session[:current_user_id] = nil end def signed_in_user unless signed_in? #只有当no-sign的User才会被跳转 store_location redirect_to signin_path, notice: "Please sign in." end end def correct_user #对于已登陆User应该是直接转到首页就OK了 @user = User.find(params[:id]) redirect_to root_path unless current_user?(@user) end end
现在我 PUT 一个 User 的信息到别的 User 上的 update 这个 Action 上的时候 看过程貌似是当作 no-sign-in 的用户直接转到 sign-in 界面了。
def current_user ##current_user ||= User.find_by_remember_token(cookies[:remember_token]) @current_user ||= User.find_by_id(session[:current_user_id]) end
对比了几次感觉就是着两行的问题 用 cookies 没问题 Session。。。