20. března 2020 542 přečtení

Scaffolding v Ruby on Rails označuje automatické generování sady modelu, pohledů a kontroléru, které se obvykle používají pro jednu databázovou tabulku.

Například můžete automaticky vygenerovat hotový kontrolér, model a pohledy s plnohodnotným webovým rozhraním CRUD (Create, Read, Update, Delete) pro tabulku Story pomocí následujícího příkazu:

$rails generate scaffold Story title:string content:text

Je to mnohem jednodušší, než vše kódovat sami, ušetří vám to spoustu času!

Lesisko nebo modely?

Ve srovnání s lešením, které generuje vše, co potřebujete (a nepotřebujete), modely vytvářejí jen některé související komponenty. Nejlépe a nejraději vysvětluji rozdíl mezi scaffoldem a modely na následujícím příkladu:

Generování modelů

Po zadání příkazu

$rails generate model Story title:string content:text

vygenerujete:

invoke active_record propojí váš model s databází, zatímco další řádek vytvoří migrační soubor. Migrace slouží ke změně schématu vaší databáze. Tento migrační soubor vytvoří databázovou tabulku s názvem „stories“ a databázové sloupce „title“ a „content“.

Třetí řádek vytvoří model – třídu jazyka Ruby, která zdědí Active Record. Díky tomu lze nyní každou metodu, kterou lze volat v Active Record, volat ve vašem modelu. Poslední tři řádky vytvoří související testovací soubory pro váš model.

Přestože vás scaffolding rychle uvede do provozu, kód, který generuje, pravděpodobně nebude dokonale vyhovovat vaší aplikaci. Pravděpodobně budete chtít vygenerovaný kód upravit. Mnoho zkušených vývojářů Rails se scaffoldingu zcela vyhýbá a raději píše celý nebo většinu zdrojového kódu od začátku. Více se o tom dočtete na stránkách RailsGuides.

Jak vidíte, generování modelů nevytváří žádný druh zobrazení pro zobrazení informací na stránce. Chcete-li mít kompletní aplikaci připravenou k použití, museli byste:

  • vygenerovat kontroléry (které následně vygenerují i pohledy) nebo
  • vygenerovat lešení (které vygeneruje váš model, pohledy, kontrolér a zapíše do souboru routes.rb).

Pokud si to rozmyslíte a rozhodnete se použít scaffold již po vygenerování modelu, můžete vždy spustit

$rails generate scaffold <name>

To vytvoří všechny chybějící soubory.

Generovat scaffold

Pokud zadáte příkaz

$rails generate scaffold Story title:string content:text

vygenerují se následující soubory:

Po vytvoření testů souvisejících s modelem se na dalším řádku vygenerují trasy zdrojů k vašim příběhům. Po vygenerování resource routes přijde na řadu kontrolér a jeho akce (index, show, new, edit, create, update a destroy) spolu s pohledy a testy kontroléru pro každou z těchto akcí.

Router Rails rozpozná adresy URL a připojí je k akci kontroléru. Ve výchozím nastavení akce kontroléru vykreslí pohled stejného jména.

Migrace

Při každém vytvoření migrace pomocí skriptů (generate model/generate scaffold) se do správného adresáře přidá nová migrace. Pomocí

$rake db:migrate

zkontrolujete, které migrace, které nebyly přidány do databáze.

Zničit

Každý může upravit a provést potřebné změny ve své aplikaci, aby fungovala tak, jak má, i kdyby to znamenalo úplné odstranění scaffoldu. Odstranit scaffold můžete následujícím způsobem:

  1. Vytvořit scaffold:
    $rails generate scaffold Story
  2. Pokud jste migrovali soubory, proveďte vrácení zpět:
    $rake db:rollback
  3. Zničte nebo zrušte lešení:
    $rails destroy scaffold Story

Tímto postupem odstraníte všechny soubory vytvořené scaffoldem, ale další změny, které jste případně provedli ručně, nebudou odstraněny.

Závěr

Scaffold je výborně použitelný, pokud jde o jednoduché příklady, rychlé makety nebo testování. Pokud se však rozhodnete vyvíjet novou aplikaci, nezapomeňte si vytvořit vlastní modely. Nezapomeňte svou aplikaci vždy otestovat, zjistěte, jak na to, pomocí Capybary!

Doufáme, že jste dnes objevili něco nového!

Předtím publikováno na https://kolosek.com/rails-scaffold/

Tags

Join Hacker Noon

Vytvořte si bezplatný účet a odemkněte si vlastní čtení.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.