2015-11-12 16 views
5

że dwa kontrolery, tj 1) carts_controller 2) orders_controllerRails4: Metody wspólne dla wielu sterowników

class CartsController < ApplicationController 
    helper_method :method3 

    def method1 
    end 

    def method2 
    end 

    def method3 
    # using method1 and method2 
    end 
end 

Uwaga: method3 używa method1 i method2. CartsController ma widok showcart.html.erb, który używa metody 3 i działa poprawnie.

Teraz w widoku celu muszę wyświetlić koszyk (showcart.html.erb), ale jako pomocnika method3 jest zdefiniowany w carts_controller, więc nie może uzyskać do niego dostępu.

Jak to naprawić?

Odpowiedz

19

Jak używasz Rails 4, zalecanym sposobem kodu podziału wśród swoich kontrolerzy mają używać kontrolerów. Obawy dotyczące kontrolera to moduły, które można łączyć z kontrolerami w celu udostępniania kodu między nimi. Powinieneś więc umieścić wspólne metody pomocnicze w kontrolerze kontrolera i dołączyć moduł dotyczący problemów do wszystkich kontrolerów, w których musisz użyć metody pomocnika.

W twoim przypadku, ponieważ chcesz udostępnić method3 między dwoma kontrolerami, powinieneś umieścić go w trosce. Zobacz this tutorial, aby dowiedzieć się, jak tworzyć obawy i udostępniać kody/metody wśród kontrolerów.

Oto niektóre kody, które pomogą Ci zacząć zabawę:

Definiowanie ty kontrolera dotyczą:

# app/controllers/concerns/your_controller_concern.rb 
module YourControllerConcern 
    extend ActiveSupport::Concern 

    included do 
    helper_method :method3 
    end 

    def method3 
    # method code here 
    end 
end 

Wtedy to obawy w kontrolerach:

class CartsController < ApplicationController 
    include YourControllerConcern 
    # rest of the controller codes 
end 

class OrdersController < ApplicationController 
    include YourControllerConcern 
    # rest of the controller codes 
end 

Teraz powinieneś być w stanie używać method3 w obu kontrolerach.

+1

Dzięki Rakibul. To działa. Jednak w moim przypadku potrzebuję również dodać metodę 1 i 2 wewnątrz CartsControllerConcern. Nauczyłem się nowej rzeczy dzisiaj :) – Khoga

0

Nie można używać metod z innego kontrolera, ponieważ nie jest on tworzony w bieżącym żądaniu.

przenieść wszystkie trzy metody klasy nadrzędnej obu kontrolerów (lub ApplicationController) lub pomocnika, więc będzie dostępna zarówno

+0

Dzięki Vasfed. Pomocnik i aplikacja działają również. – Khoga

Powiązane problemy