2012-04-06 11 views
2

I以下application_controller方法があります。いつbefore_filterとhelper_methodのどちらを使用する必要がありますか?

def current_account 
    @current_account ||= Account.find_by_subdomain(request.subdomain) 
    end 

私はbefore_filterやhelper_methodを使用して、それを呼び出すれるべきか?両者の違いは何ですか?この場合のトレードオフの観点から私は何を考慮すべきですか?

ありがとうございました。 BETTER CLARITY

FOR

UPDATE私は、ユーザーの代わりに、私は私のビューからコントローラ定義されたメソッドを呼び出すことができるよという点で、helper_methodbefore_filterできることを発見しています。多分それはので、ここで、私は私のコードを配置し仕方に何か私が持っているものです。

コントローラ/ application_controller.rb

class ApplicationController < ActionController::Base 

    protect_from_forgery 

    include SessionsHelper 

    before_filter :current_account 
    helper_method :current_user 

end 

ヘルパー/ sessions_helper.rb

module SessionsHelper 

    private 

    def current_account 
    @current_account ||= Account.find_by_subdomain(request.subdomain) 
    end 

    def current_user 
    @current_user ||= User.find(session[:user_id]) if session[:user_id] 
    end 

    def logged_in? 
    if current_user 
     return true 
    else 
     return false 
    end 
    end 
end 

controllers/spaces_controller.rb

class SpacesController < ApplicationController 

    def home 
    unless logged_in? 
     redirect_to login_path 
    end 
    end 
end 

ビュー/スペース/ home.html.erb理論的には

<%= current_account.inspect %> 

、これは動作しないはずですよね?

答えて

4

before_filterまたはhelper_methodの使用には関係がありません。あなたのビューで再利用したいコントローラのメソッドを持っているときは、ヘルパーメソッドを使うべきです。このcurrent_accountは、あなたのビューでそれを使う必要があるなら、helper_methodの良い例かもしれません。

+0

私は現在このメソッドでbefore_filterを使用しています。私のビューから呼び出すことができます。何か不足していますか? – Nathan

+1

このメソッドがコントローラ内で定義されている場合は、** @ current_account **インスタンス変数にアクセスしている場合を除いて、ビューで呼び出すことはできません。 –

+0

@MaurícioLinhares、真実ではない。彼がコントローラ内で 'helper_method:current_account'を呼び出すと、メソッドはビューで利用可能になります。 – tsherif

3

これは2つの非常に異なるものです。 before_filterは、アクションが開始される前にに一度と呼ばれるものです。一方、ヘルパーメソッドは、通常はビューで頻繁に繰り返されます。

あなたがそこに持っている方法は、それがどこにとどまるかは問題ありません。

+0

それぞれが非常に異なっているので、 'helper_method'が各アクションのためにメソッドをメモリに呼び出さないと言っていますか?つまり、ビューとメソッドの間のコンジットとしてのみ使用され、必要に応じてビューから呼び出されますか? – Nathan

+0

いいえ、プログラマーは必要なときにビュー(または他の場所)から 'helper_method'sを呼び出します。 Railsはコントローラのアクションの前に自動的に 'before_filter'を呼び出します。 – robbrit

1

私は私の問題を解決しました。私はRailsが新しく、helpersディレクトリに定義されたメソッドが自動的にhelper_methodsであることを知らなかった。今私はこれがどのようにメモリ/パフォーマンスに影響を与えるのだろうかと思っています。しかし、少なくとも私は謎を解き明かされている。みんなあなたの助けをありがとう!

関連する問題