50

Mam niektóre metody Ruby niektórych (lub wszystkich) kontrolerów. Próbowałem je umieścić w /app/helpers/application_helper.rb. Używałem tego do metod używanych w widokach. Ale kontrolery nie widzą tych metod. Czy jest inne miejsce, w które powinienem je umieścić, czy też muszę inaczej uzyskać dostęp do tych metod pomocniczych?Gdzie umieścić metody pomocnicze Ruby dla kontrolerów Rails?

Korzystanie z najnowszych stabilnych szyn.

Odpowiedz

61

Powinieneś zdefiniować metodę wewnątrz ApplicationController.

+20

Będzie miał również dodać 'helper_method: my_helper_method' w' ApplicationController' aby były dostępne dla widoki. – David

+0

miły dodatek @JohnnyGrass –

+1

nie doprowadzi to do kontrolera tłuszczu w czasie? – babonk

7

Odpowiedź Ryana Bigga jest dobra.

Inne możliwe rozwiązanie to dodać pomocników do kontrolera:

class YourController < ApplicationController 
    include OneHelper 
    include TwoHelper 
end 

Pozdrawiam!

13

Możesz wywoływać dowolne metody pomocnicze za pomocą kontrolera, korzystając z view_context, np.

view_context.my_helper_method 
25

należy zdefiniować metody wewnątrz kontrolerze aplikacji, jeśli masz kilka metod następnie można zrobić jak postępować

class ApplicationController < ActionController::Base  
    helper_method :first_method 
    helper_method :second_method 

    def first_method 
    ... #your code 
    end 

    def second_method 
    ... #your code 
    end 
end 

Można również zawierać pliki pomocnicze jak postępować

class YourController < ApplicationController 
    include OneHelper 
    include TwoHelper 
end 
+0

czy istnieje sposób na przypisanie wszystkich helper_metod w jednej linii? –

+0

@HarshaMV Myślę, że możesz po prostu postępować jak 'helper_method: first_method,: second_method'. –

40

dla szyn Począwszy od 4, obawy są do zrobienia. Tutaj jest przyzwoity artykuł: http://richonrails.com/articles/rails-4-code-concerns-in-active-record-models

W skrócie, jeśli zajrzysz do folderu kontrolerów, powinieneś zobaczyć podkatalogi obawy. Utwórz moduł tam wzdłuż tych linii

module EventsHelper 
    def do_something 
    end 
end 

Następnie w sterowniku tylko to, że

class BadgeController < ApplicationController 
    include EventsHelper 

    ... 
end 
+0

Uważam, że jest to najmilsze rozwiązanie, gdy nie potrzebujesz metod pomocniczych zawartych we wszystkich kontrolerach. To rozwiązanie dotyczy również modeli. – Dennis

+0

Nice. Dziękuję :) – tonyedwardspz

+0

Czy wiesz, czy potrzebujemy użyć rozszerzenia ActiveSupport :: Concern z obawy kontrolera? – Marklar