47.12. Řadič (Controller)

47.12.1. Užití controlleru bez podkladové datové tabulky
47.12.2. Vytvoření řadiče

section id="rails.controller"

Odkazy:

Ř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://server/aplikace/řadič/metoda a v případě serveru WEBrick http://server:port/řadič/metoda. U níže uvedeného příkladu řadiče tedy voláme metodu 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 dog
      exists  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
Soubor s řadičem. Každá veřejná metoda třídy řadiče reprezentuje jednu akci jenž je možno z WWW rozhraní volat.
app/functional/jméno_controller_test.rb
Soubor s unit testy řadiče. Použijeme pokud aktivně používáme metody extrémního programování v Rails. Vřele doporučuji.
app/helpers/jméno_helper.rb
Pomocné metody používané pohled tohoto řadiče. FIXME:Zde je to pravé místo pro kód jenž je společný všem pohledům.
app/views/jméno/
Toto není soubor, ale adresář. V tomto adresáři budou pohledy které řadič používá, respektive skrze které zobrazuje data. Běžně odpovídají pohledy názvům metod řadiče.

FIXME:

$ script/generate controller call
      exists  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 %>.

Licence Creative Commons
Tento dokument Ruby, jehož autorem je Radek Hnilica, podléhá licenci Creative Commons Uveďte autora-Nevyužívejte dílo komerčně-Zachovejte licenci 3.0 Česká republika .