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č
/metoda
http://
.
U níže uvedeného příkladu řadiče tedy voláme metodu server
:port
/řadič
/metoda
index
pomocí url http://localhost:3000/hello/index
.
class HelloController < ApplicationController def index render_text "Hello user!" end end
Jak 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.rb
app/functional/jméno
_controller_test.rb
app/helpers/jméno
_helper.rb
app/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 %>
.