[前][次][番号順一覧][スレッド一覧]

rails:1997

From: 山崎雄介 <y-yamasaki@s...>
Date: Tue, 06 Feb 2007 21:24:05 +0900
Subject: [rails:1997] 継承時のbefore_filterの呼び出し順序について

山崎(ゆ)です。

社内掲示板のようなアプリを作っています。
ユーザ管理画面の表示では、最大で2段階のbefore_filterが適用されるようになっ
ています。ただし、ログインしていない状態では最初のsession_authに引っかか
るので、かならずlogin画面に飛び、もうひとつが呼ばれることはないはずです。

class ApplicationController < ActionController::Base
  before_filter :session_auth, :except => [:login, :auth, :logout]
  
  def session_auth
    request_page = request.env['REQUEST_URI']
    reset_expiration
    session[:request] = request_page
    unless session[:me]
      self.class.logger.debug("session_auth_failure") # ここは呼ばれている。
      flash[:notice] = 'ログインして下さい。'
      redirect_to :action => 'login'
    else
      @me = session[:me]
    end
  end
end

class UserController < ApplicationController
  before_filter :reject_user, :only => [:list]
  
  def reject_user
    self.class.logger.debug("reject_user") # 呼ばれてはいけないのに呼ばれる。
    raise unless @me.manager
  end
  
  def login
    self.class.logger.debug("login") # ここは呼ばれない。
    @user = User.new :mail => session[:mail]
    raise params[:error].to_s unless session[:me]
    redirect_to :action => 'index'
  rescue => err
    flash[:notice] = err.message
  end

end

ところが実際、ログインしていない状態で、
http://localhost:3000/user/list
を呼ぶと、login は呼ばれず、先にlist -> reject_user と呼ばれてしまいます。
ログインしていないので、誰をrejectしてよいかわからずエラーになります。
下位クラスのbefore_filterが先に呼ばれているんじゃないでしょうか。
Rails1.6.0のときは問題なかったような気がするんですけど、なにかの勘違いで
すかねぇ。

Ruby version                 1.8.5 (i386-mswin32)
RubyGems version             0.9.0
Rails version                1.2.1
Active Record version        1.15.1
Action Pack version          1.13.1
Action Web Service version   1.2.1
Action Mailer version        1.3.1
Active Support version       1.4.0
Application root             C:/rails/infocard
Environment                  development
Database adapter             sqlite3
Database schema version      8
GetText version              1.9.0

_______________________
Yusuke Yamasaki <y-yamasaki@s...>


--
ML: rails@r...
使い方: http://QuickML.com/

[前][次][番号順一覧][スレッド一覧]

->    1997 2007-02-06 13:24 [y-yamasaki@s...     ] 継承時のbefore_filterの呼び出し順序について
      1998 2007-02-06 14:19 ┗[moriq@m...          ]                                       
      1999 2007-02-06 16:38  ┗[y-yamasaki@s...     ]