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

rails:3167

From: しん <dezawa@a...>
Date: Thu, 27 Aug 2009 00:15:35 +0900 (JST)
Subject: [rails:3167] before_filter がうまく動かない

出沢です

いつもお世話になっています。

ユーザによってアクセスさせたくないControllerが二つあるので、それを
before_filter で制限を掛けようと思っています
ところが思うように動きません。どこの辺りがおかしいかご教授ください

お聞きしたいことは2点あります

1.複数のControllerから呼ばれるfilterはどこに置いたらよいのか
2.filter が false を返しても、実行されてしまう、なぜか

1.次のように記述し、ndividual_requireds を application_helper.rb に定義しました。
  class UsersController < ApplicationController
    # Be sure to include AuthenticationSystem in Application Controller instead
    include AuthenticatedSystem

    before_filter :login_required
    before_filter :individual_requireds

  結果は undefined method `individual_required' for 。。。
  となりました。

2.users_controller.rbに ndividual_required を定義しました。
  def individual_required  # 個人IDの人。スーパ、承認者、ゲスト以外の人
     logger.debug("個人IDの人 #{(current_user.rolls.map(&:roll_no) - 
                   [0,999998,999999]).size>0}")
     (current_user.rolls.map(&:roll_no) - [0,999998,999999]).size > 0
  end

  log には 「個人IDの人 false」と記録されているにもかかわらず、実行されて
  しまいます。

  同時に定義してある before_filter :login_required の方は、期待通りに動きます。
  即ち、login せずに URLを直接アクセスするとlogin 画面に誘導されます。

  もっともこれは、Controllerの実行を拒否したのではなく login_required の
  中で、login画面を呼び出しているのですが。。。

  before_filter が false を返すと実行されない、と思っているのは間違いで
  しょうか。
  そう思っている理由は 西和則さんの Ruby on Rails入門第1版の193ページからの
  フィルターの章の 193ページ一番下の記述によります。
    上記の様に初期化メソッドを準備した瞬間、CGIが突然反応しなくなってビックリ
    することになります。"before_filter"では"return true"を最後に書くように
    するとよいでしょう。

環境は Linux RH9, Rails 2.3.2, ruby 1.8.7 です。

よろしくお願いします。


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

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

   @  3165 2009-08-26 16:36 [byplayer100@g...    ] 参加します                              
->    3167 2009-08-26 17:15 ┗[dezawa@a...         ] before_filter がうまく動かない        
      3168 2009-08-26 17:35  ┗[tsukasa.oishi@g...  ]                                     
      3169 2009-08-27 03:33   ┗[dezawa@a...         ]