2012-04-06 14 views
2

Ich habe folgende application_controller Methode:Wann sollte ich before_filter vs helper_method verwenden?

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

Soll ich es mit einem before_filter oder eine helper_method anrufen? Was ist der Unterschied zwischen den beiden und was sollte ich in diesem Fall berücksichtigen?

Danke.

UPDATE der besseren Übersicht halber

Ich finde, dass ich kann Benutzer die before_filter anstelle des helper_method, dass ich in der Lage Controller definiert Methoden aus meiner Ansichten zu nennen. Vielleicht ist es etwas, wie ich meinen Code angeordnet, also hier ist das, was ich habe:

Controller/application_controller.rb

class ApplicationController < ActionController::Base 

    protect_from_forgery 

    include SessionsHelper 

    before_filter :current_account 
    helper_method :current_user 

end 

Helfer/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 

controller/spaces_controller.rb

class SpacesController < ApplicationController 

    def home 
    unless logged_in? 
     redirect_to login_path 
    end 
    end 
end 

views/Räume/home.html.erb

<%= current_account.inspect %> 

Theoretisch sollte dies nicht funktionieren, nicht wahr?

Antwort

4

Es gibt keine Beziehung zwischen der Verwendung von before_filter oder helper_method. Sie sollten die Hilfsmethode verwenden, wenn Sie eine Methode in Ihrem Controller haben, die Sie in Ihren Ansichten wiederverwenden möchten. Dieser current_account könnte ein schönes Beispiel für helper_method sein, wenn Sie ihn in Ihren Ansichten verwenden müssen.

+0

Ich verwende derzeit ein before_filter für diese Methode und kann es aus meinen Ansichten aufrufen. Fehle ich etwas? – Nathan

+1

Wenn diese Methode in einem Controller definiert ist, können Sie sie möglicherweise nicht in einer Ansicht aufrufen, es sei denn, Sie greifen auf die Instanzvariable ** @ current_account ** zu, was eine schlechte Praxis wäre. –

+0

@ MaurícioLinhares, nicht wahr. Wenn er in einem Controller 'helper_method: current_account' aufruft, steht die Methode in den Ansichten zur Verfügung. – tsherif

3

Sie sind zwei sehr unterschiedliche Dinge. Ein before_filter ist etwas, das Sie möchten, dass einmal vor einer Aktion aufgerufen wird. Eine Hilfsmethode dagegen wird oft wiederholt, typischerweise in einer Ansicht.

Diese Methode, die Sie dort haben, ist gut, um zu bleiben, wo es ist.

+0

Wie für jedes Wesen sehr unterschiedlich, sagst du, die 'helper_method' ruft die Methode nicht für jede Aktion in den Speicher auf? Mit anderen Worten, es wird nur als Verbindung zwischen der Ansicht und der Methode verwendet und wird nach Bedarf aus der Sicht aufgerufen. – Nathan

+0

Nein, der Programmierer ruft 'helper_method' aus der Ansicht (oder anderen Orten) auf, wenn sie benötigt werden. Rails ruft 'before_filter' vor den Controlleraktionen automatisch auf. – robbrit

1

Ich löste mein Problem. Ich bin neu bei Rails und wusste nicht, dass Methoden, die im Helferverzeichnis definiert sind, automatisch helper_methods sind. Jetzt frage ich mich, wie sich dies auf die Speicherleistung auswirkt. Aber zumindest habe ich das Rätsel gelöst. Vielen Dank für Ihre Hilfe!

Verwandte Themen