20 mars 2020 542 läsningar

Scaffolding i Ruby on Rails avser automatisk generering av en uppsättning av en modell, vyer och en controller som vanligtvis används för en enda databastabell.

Till exempel kan du automatiskt generera en färdig controller, modell och vyer med ett fullständigt CRUD-gränssnitt (Create, Read, Update, Delete) för Story-tabellen genom att använda följande kommando:

$rails generate scaffold Story title:string content:text

Det är mycket enklare att göra det här, istället för att koda allting själv, det sparar dig mycket tid!

Scaffold eller modeller?

Varemot scaffold som genererar allt som du behöver (och inte behöver), skapar modeller bara några relaterade komponenter. Det bästa, och min favorit, sättet att förklara skillnaden mellan scaffold och modeller är att använda följande exempel:

Generera modeller

När du väl har angett kommandot

$rails generate model Story title:string content:text

kommer du att generera:

invoke active_record kommer att knyta din modell till databasen, medan nästa rad skapar en migreringsfil. Migrationer används för att ändra ditt databasschema. Den här migrationsfilen skapar databastabellen ”stories” och databaskolumner för ”title” och ”content”.

Den tredje raden skapar en modell – en Ruby-klass som ärver Active Record. Med detta kan varje metod som kan anropas i Active Record nu anropas i din modell. De tre sista raderna skapar relaterade testfiler för din modell.

Samtidigt som scaffolding får dig snabbt igång, är det osannolikt att koden som den genererar passar perfekt för din applikation. Du kommer med största sannolikhet att vilja anpassa den genererade koden. Många erfarna Rails-utvecklare undviker scaffolding helt och hållet och föredrar att skriva all eller större delen av sin källkod från grunden. Du kan läsa mer om detta på RailsGuides.

Som du kan se skapar generate models inte någon typ av vy för att visa information på en sida. För att få en komplett, färdig applikation behöver du:

  • generera controllers (som i sin tur också genererar vyer) eller
  • generera scaffold (som genererar din modell, dina vyer, din controller och skriver till din routes.rb-fil).

Om du ändrar dig och bestämmer dig för att använda scaffold efter att du redan har genererat modellen kan du alltid köra

$rails generate scaffold <name>

Det kommer att skapa alla saknade filer.

Generera scaffold

Om du anger kommandot

$rails generate scaffold Story title:string content:text

ska du generera följande filer:

När modellrelaterade tester har skapats kommer nästa rad att generera resursrutter till dina berättelser. Efter generering av resursvägar kommer kontrollern och dess åtgärder (index, show, new, edit, create, update och destroy), tillsammans med vyer och kontrollertester för var och en av dessa åtgärder.

Rails router känner igen webbadresser och kopplar dem till en kontrollers åtgärd. Som standard renderar en controllers åtgärd en vy med samma namn.

Migration

Varje gång du skapar en migration med hjälp av skript (generate model/generate scaffold) läggs en ny migration till i rätt katalog. Du använder

$rake db:migrate

för att kontrollera vilka migreringar som inte har lagts till i databasen.

Destroy

Det står var och en fritt att redigera och göra de nödvändiga ändringarna i sitt program för att det ska fungera som det är tänkt, även om det innebär att man helt tar bort scaffold. Du kan ta bort scaffold på följande sätt:

  1. Generera scaffold:
    $rails generate scaffold Story
  2. Om du har migrerat dina filer ska du göra en rollback:
    $rake db:rollback
  3. Destruera eller upphäv scaffold:
    $rails destroy scaffold Story

Därmed raderar du alla filer som skapats av ställningen, men ytterligare ändringar som du kan ha gjort manuellt tas inte bort.

Slutsats

En ställningen är utmärkt att använda när det gäller enkla exempel, snabba mockups eller tester. Se dock till att generera egna modeller när du bestämmer dig för att utveckla en ny applikation. Glöm inte att alltid testa din applikation, ta reda på hur du gör det genom att använda Capybara!

Vi hoppas att du upptäckte något nytt idag!

Förut publicerat på https://kolosek.com/rails-scaffold/

Taggar

Gå med i Hacker Noon

Skapa ett kostnadsfritt konto för att låsa upp en anpassad läsupplevelse.

Lämna ett svar

Din e-postadress kommer inte publiceras.