Helpery

Witam
cos mi tu nie gra

mamy sobie kontroler, ktory dziedziczy po ApplicationController

class KontaktController < ApplicationController

ApplicationController ma w sobie:
helper :all # include all helpers, all the time

co znaczy (tak mi sie wydaje), ze dolacza do ApplicationController wszystkie helpery z katalogu Helpers, tak?

Wiec dlaczego zeby skorzystac z helpera: test_helper w KontaktController musze zrobic indcludea?

class KontaktController < ApplicationController
include TestHelper

teraz wszytko dobrze dziala.

Przeciez jak KontaktContoller dziedziczy po ApplicationController, ktory zawiera wszystkie helpery to powinno sie dac odwolywac do nich bez includeow…?

Pozdrawiam

Helpery służą do wspomagania widoków, nie kontrolerów.
helper :all nie includuje nic w kontrolerach (zauważ, że w każdym z widoków bez problemu możesz odwołać się do wszystkich metod helperów). Jest bardzo niewiele sytuacji, w których konieczne byłoby stosowanie helperów w kontrolerach - pomyśl czy na pewno musisz to robić a jeśli tak to po prostu sam je dołącz, właśnie tak jak robisz to teraz.

aaa rozumie, myslalem ze helpery zostaly wlasnie stworzone dla kontrolerow.

dzieki za odpowiedz, a moze im jeszcze powiesz (lub ktos inny) co jesli 2 helpery zawieraja 2 takie same metody

helper1
def metoda
end

helper2
def metoda
end

jak teraz moge w vidoku uzyc metody “metoda” z helper1 i z helper2?

pozdrawiam

http://api.rubyonrails.org/classes/ActionController/Helpers/ClassMethods.html - looknij tutaj, wiele wyjaśni.

Jak chcesz mieć helpery widoczne w kontrolerze, to zobacz metodę helpet_method.

Jeżeli chodzi o drugą część pytania, to jeżeli masz helper :all i zadeklarujesz 2 metody o takiej samej nazwie, to jedna z metod nadpisze tą drugą - w zależności od tego, który helper zostanie wczytany jako pierwszy.

Jeżeli chcesz mieć takie same nazwy metod dla różnych helperów najlepiej usuń po prostu helper :all - z tego co pamiętam helpery będą wtedy includeowane do odpowiadających im kontrolerów. Ale co do tego pewności nie mam, więc musisz sprawdzić.

okey dzieki za odpowiedzi duzo mi sie wyjasnilo

pozdr.