2017-03-08 2 views
0

Ist es möglich, eine einschließbare Controller-Aktion innerhalb eines Rails Helper durch einen included Block zu machen? Ich bin so etwas wie dieses zu denken:Erstellen Sie eine "includable" Rails-Controller-Aktion innerhalb des Helfers

module XablauHelper 
    included do 
    def my_shared_action 
     true 
    end 
    end 
end 

bereits versucht, es durch class.eval Block tun und durch das heißt self.my_shared_action wie ein Klassenmethode verwenden, aber ohne Erfolg, habe ich gefunden, bereits eine Lösung, die eine übergeordnete Steuerung mit dem gewünschten macht Shared Actions und erben von ihr, aber um des modularen Designs willen möchte ich es zu einem "globaleren" Ansatz machen, damit ich meine Lösung und den Code wiederverwenden kann, irgendwelche Vorschläge, die keine Vererbung verwenden?

+1

sollten Sie Bedenken verwenden http://api.rubyonrails.org/classes/ActiveSupport/Concern.html – mdesantis

Antwort

1

Hinzufügen Controller Aktionen in einem Helfer ist wahrscheinlich die falsche Wahl, da diese Methoden für Ihre Ansichten bestimmt sind.

Erwägen Sie stattdessen die Verwendung von Controllerproblemen und fügen Sie sie gegebenenfalls hinzu. Zum Beispiel:

# in app/controllers/concerns/useful_functions_concern.rb 
module UsefulFunctionsConcern 
    extend ActiveSupport::Concern 

    included do 
    rescue_from SomeException, with: :handle_access_denied 
    end 

    def useful_method 
    # ... 
    end 

    protected 
    def handle_access_denied 
    # ... 
    end 
end 

# in your controller 
class XyzController < ApplicationController 
    include UsefulFunctionsConcern 

    def index 
    useful_method 
    end 
end 

Wo gemeinsame Controller-Aktionen gemeinsam genutzt werden können und die Controller etwas gemeinsam haben, z. Sie sind alle API-Controller, auch die Verwendung von Vererbung, um dies zu erreichen. Zum Beispiel:

# parent controller 
class ApiController < ApplicationController 
    def my_shared_action 
    end 
end 

class SpecificApiController < ApiController 
end 
+0

Sauber und einfach, Dank! Ich werde versuchen, Lösung in den nächsten Tagen und markieren Sie als richtige Antwort, wenn erfolgreich. – ErvalhouS

Verwandte Themen