Když píšete vlastní programy od začátku do konce, je to snadné vidět řízení toku. Program začíná zde, je tam smyčka, volání metod je tady, je to všechno viditelné. Ale v aplikaci Rails to není tak jednoduché. V rámci jakéhokoli druhu se vzdáváte kontroly nad takovými věcmi, jako je „tok“, ve prospěch rychlejšího nebo jednoduššího způsobu provádění složitých úkolů. V případě Ruby on Rails se řízení toku provádí za scénami a vše, co vám zbude, je (více či méně) kolekce modelů, pohledů a ovladačů.
Jádrem každé webové aplikace je HTTP. HTTP je síťový protokol, který váš webový prohlížeč používá k rozhovoru s webovým serverem. Odtud pocházejí pojmy jako „žádost“, „GET“ a „POST“, jsou základní slovní zásobou tohoto protokolu. Protože však Rails je abstrakcí, nebudeme o tom trávit mnoho času.
Když otevřete webovou stránku, klikněte na odkaz nebo odešlete formulář ve webovém prohlížeči, prohlížeč se připojí k webovému serveru přes TCP / IP. Prohlížeč poté odešle serveru „požadavek“, přemýšlejte o něm jako o formuláři, který prohlížeč vyplní a požádá o informace na určité stránce. Server nakonec odešle webovému prohlížeči „odpověď“. Ruby on Rails však není webový server, webový server může být cokoli z Webricku (co se obvykle stane, když spustíte server Rails od
příkazový řádek) k Apache HTTPD (webový server, který ovládá většinu webu). Webový server je pouze zprostředkovatel, vezme požadavek a předá ho vaší aplikaci Rails, který generuje odpověď a předá se zpět na server, který ji zasílá zpět klient. Dosud to tak je:Jednou z prvních věcí, kterou aplikace Rails provádí s požadavkem, je odeslat ji přes router. Každá žádost má adresu URL, to je to, co se objeví v adresním řádku webového prohlížeče. Router je to, co určuje, co se má s touto adresou URL udělat, zda má adresa URL smysl a zda adresa URL obsahuje nějaké parametry. Směrovač je nakonfigurován v config /ways.rb.
Nejprve si uvědomte, že konečným cílem routeru je porovnat adresu URL s řadičem a akcí (více o nich později). A protože většina aplikací Rails je RESTful a věci v RESTful aplikacích jsou reprezentovány pomocí zdrojů, uvidíte řádky jako zdroje: příspěvky v typických Rails aplikacích. To odpovídá URL jako /posts/7/edit u správce příspěvků Upravit akce na příspěvek s ID 7. Router jen rozhoduje, kam se požadavky dostanou. Náš blok [Rails] lze tedy trochu rozšířit.
Nyní, když se router rozhodl, ke kterému řadiči poslat požadavek a ke které akci na tomto řadiči, odešle ji. Řadič je skupina souvisejících akcí, které jsou spojeny dohromady ve třídě. Například v blogu je veškerý kód pro prohlížení, vytváření, aktualizaci a mazání příspěvků na blogu spojen do kontroléru zvaného „Post“. Akce jsou prostě normální metody této třídy. Ovladače jsou umístěny v aplikace / řadiče.
Řekněme tedy, že webový prohlížeč poslal žádost /posts/42. Router rozhodne, že se to týká Pošta ovladač, ukázat metoda a ID příspěvku, který se má zobrazit, je 42, tak to volá ukázat metoda s tímto parametrem. ukázat metoda není zodpovědná za použití modelu k načtení dat a použití pohledu k vytvoření výstupu. Náš rozšířený blok [Rails] je nyní:
Tento model je nejjednodušší pochopit a nejtěžší je implementovat. Model je zodpovědný za interakci s databází. Nejjednodušší způsob, jak vysvětlit, že je tento model, je jednoduchá sada metod volání, která vracejí holé objekty Ruby, které zpracovávají všechny interakce (čtení a zápis) z databáze. Takže po příkladu blogu bude rozhraní API, které bude řadič používat pro načítání dat pomocí modelu, vypadat podobně Post.find (params [: id]). params je to, co router analyzoval z adresy URL, příspěvek je model. To vytváří dotazy SQL nebo dělá vše potřebné pro načtení blogového příspěvku. Modely jsou umístěny v aplikace / modely.
Je důležité si uvědomit, že ne všechny akce musí používat model. Interakce s modelem je vyžadována pouze tehdy, když je třeba data načíst z databáze nebo uložit do databáze. Jako takový vložíme otazník za něj do našeho malého vývojového diagramu.
Nakonec je čas začít generovat nějaký HTML. HTML nezpracovává samotný řadič ani model. Smyslem použití rámce MVC je rozdělovat vše. Databázové operace zůstávají v režimu, generování HTML zůstává v zobrazení a ovladač (nazývaný routerem) je volá oba.
HTML je obvykle generováno pomocí zabudovaného Ruby. Pokud jste obeznámeni s PHP, tj. Soubor HTML s vloženým kódem PHP, pak bude Ruby velmi dobře známý. Tyto pohledy jsou umístěny v aplikace / zobrazenía ovladač zavolá jeden z nich, aby vygeneroval výstup a poslal jej zpět na webový server. Veškerá data získaná řadičem pomocí modelu budou obecně uložena v proměnná instance které budou díky nějaké Ruby magii dostupné jako proměnné instance z pohledu. Vložený Ruby také nemusí generovat HTML, může generovat jakýkoli typ textu. Uvidíte to při generování XML pro RSS, JSON atd.
Tento výstup je odeslán zpět na webový server, který jej odešle zpět do webového prohlížeče, který proces dokončí.