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... ]