section id="rails.controller"
Řadič (Controller) je objekt který zprostředkuje spojení mezi pohledem a datovým modelem / obchodními objekty. V jednom směru přijímá uživatelské požadavky přicházející skrze pohled a zprostředkovává interakci s obchodními objekty (daty). A ve druhém přebírá data z obchodních objektů a umožňuje jejich zobrazení pohledem.
V řadiči je vlastně implementována logika uživatelského rozhraní. Co se stane když zmáčknu tady to tlačítko na stránce, jak se použije hodnota vyplněná do políčka formuláře, která stránka se zobrazí jako další, …
Z hlediska kódu je řadič specializací třídy ApplicationController.
Jednotlivé metody objektu této třídy jsou volány v odpovědi na akce uživatele přicházející prostřednictvím pohledu, tedy uživatelského rozhraní.
Metody řadiče jsou přímo přístupny přess www rozhraní.
V případě užití Apache http:// a v případě serveru WEBrick server/aplikace/řadič/metodahttp://.
U níže uvedeného příkladu řadiče tedy voláme metodu server:port/řadič/metodaindex pomocí url http://localhost:3000/hello/index.
class HelloController < ApplicationController
def index
render_text "Hello user!"
end
endJak tedy řadič vytvoříme? K tomu nám poslouží generátor script/generate controller, jako parametr mu předáme název řadiče, a seznam akcí na které má reagovat. Jméno řadiče by mělo být podstatné jméno v jednotném tvaru v jazyce anglickém. Generátor vytvoří šablony všech souborů jenž s řadičem souvisí.
script/generate controller ControllerName [Actions]
$script/generate controller dogexists app/controllers/ exists app/helpers/ create app/views/dog exists test/functional/ create app/controllers/dog_controller.rb create test/functional/dog_controller_test.rb create app/helpers/dog_helper.rb
Soubory které se vytvoří jsou tedy:
app/controller/jméno_controller.rbapp/functional/jméno_controller_test.rbapp/helpers/jméno_helper.rbapp/views/jméno/FIXME:
$script/generate controller callexists app/controllers/ exists app/helpers/ create app/views/call exists test/functional/ create app/controllers/call_controller.rb create test/functional/call_controller_test.rb create app/helpers/call_helper.rb
Skript vytvoří prázdný controller.
Do něj můžeme umístnit na rychlo lešení (scaffold).
class CallController < ApplicationController
scaffold :call
end
Chceme-li předat nějakou hodnotu do pohledu (view), zapíšeme ji v controlleru do proměnné instance například @moje_hodnota.
V pohledu se na ni pak odkážeme třeba takto <%= @moje_hodnota %>.
