Rails 请教对同一个 Action 做 filter 的问题

woody1983 · 2012年10月31日 · 最后由 woody1983 回复于 2012年10月31日 · 2616 次阅读
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。。。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号