2009-12-13 65 views

回答

16

我覺得你問如何運行一個只有當用戶登錄濾波器之前沒有內置的語義這一點,但它很容易內聯:

class SomeController < ApplicationController 
    before_filter :do_something 

    def do_something 
    if logged_in? 
     # the stuff you want to do 
    end 
    end 
end 
+0

正是我需要的。 – s84 2009-12-15 14:04:03

+0

是否已在軌道4中棄用? – vishB 2013-10-04 13:44:29

1

如果您使用的是平安認證,那只是before_filter :login_required。如果您使用自己的身份驗證框架,則可以在application.rb中創建一個方法,如果用戶已登錄或在重定向到登錄頁面時返回true。

18
before_filter :only_when_user_is_logged_in, :only => :the_action 

或者多個

before_filter :only_when_user_is_logged_in, :only => [:the_action, :another_action] 

在另一面,你也可以提供一個:except => :this_action選項

+0

這是規範模式,按照Rails指南:http://guides.rubyonrails.org/action_controller_overview.html#filters – clozach 2012-12-10 04:34:50

2

如果你真的不想before_filter比已登錄的用戶以外的任何人執行考慮在你的驗證過濾器中使用#skip_before_filter。例如,如果您在檢查用戶是否在您的驗證過濾器中登錄,如果驗證失敗,只需撥打skip_before_filter :filter_for_logged_in_users_only即可。

除此之外,您可以在執行僅限成員篩選器之前簡單測試用戶是否已登錄。例如:

def filter_for_logged_in_users_only 
    return true unless current_user && logged_in? 
    #rest of the logic 
end 
+0

好東西。謝謝 – s84 2009-12-15 14:04:34

11

前置過濾器需要,它傳遞電流控制器實例 ,所以你可以做這樣的事情一個可選模塊:

before_filter :do_stuff, lambda { |controller| controller.logged_in? } 
0
class LoginsController < ApplicationController 

    skip_before_filter :require_login, :only => [:new, :create] 

end 
+0

糟糕,
, 內部控制器。也許你正在使用你自己的新發明的編輯器。 – Rubyist 2014-01-07 10:00:17