2014-06-06 11 views
6

Ich habe für kurze Zeit mit Ruby on Rails gearbeitet. Kürzlich habe ich ein Authentifizierungssystem für meine Anwendung implementiert. Ich habe eine Methode für 'application_helper.rb' zur Verfügung gestellt, um den aktuell angemeldeten Benutzer (Methode namens current_user) abzurufen.Ruby on Rails: Gängige Methode für Controller und Views?

Die Methode ruft nur mein User Objekt ab, wenn die session[:user_id] Variable vorhanden ist.

Allerdings habe ich das folgende Problem.

  1. Wenn ich die current_user Methode in 'application_helper.rb' setzen, meine Controller kann nicht Gebrauch davon
  2. machen Wenn ich die current_user Methode in 'application_controller.rb' platzieren, meine Ansichten kann nicht davon Gebrauch machen

Was ist der beste Ansatz, um dieses Problem zu lösen? Der einfache Weg wäre, meinen Code sowohl im Controller als auch im Helfer zu duplizieren, aber ich weiß, dass es einen besseren und korrekten Weg gibt.

Vielen Dank im Voraus

Antwort

6

Dies ist ein häufiges und gut gelöstes Problem.

Mit Rails können Controller nicht auf Hilfsmethoden zugreifen. Wenn Sie eine Methode zwischen Ansichten und Controller gemeinsam nutzen möchten, müssen Sie die Methode in Ihrem Controller definieren, und es dann mit helper_method auf Ihre Ansichten zur Verfügung stellen:

class ApplicationController < ActionController::Bbase 

    # Let views access current_user 
    helper_method :current_user 

    def current_user 
    # ... 
    end 

end 

Sie können mehr als eine Methode Namen übergeben zu helper_method, um zusätzliche Methoden in Ihrem Controller für Ihre Ansichten zur Verfügung zu stellen:

helper_method :current_user, :logged_in? 

    def current_user 
    # ... 
    end 

    def logged_in? 
    !current_user.nil? 
    end 
+0

Ich wusste, es würde etwas so einfach wie das sein. Ich dachte, helper_method hätte das Gleiche getan wie die Methode in die Hilfsklasse, aber das ist es nicht. Danke für die schnelle Antwort und die Syntaxbearbeitung. :) – Lupi

+0

@meagar: Ich habe das gleiche Problem, aber das Hinzufügen von Hilfsmethode hat es nicht behoben, ich habe sowohl meine Methode als auch meinen Helfer in meinem class_controller nicht Application Controller definiert. http://stackoverflow.com/questions/24993912/share-method-in-view-and-controller-ruby-on-rails-4 – user1876128

Verwandte Themen