Následuje vytvoření souboru modelu v adresáři blog/app/models…
article.rb
<<< Květen 2019 AKTUALIZACE OD AUTORA >>>
Místo použití vizuálního textového editoru můžete soubor vytvořit také prostřednictvím terminálu:
cd app/models
touch article.rb
<<< KONEC AKTUALIZACE >>>
Nyní zpět ve vizuálním textovém editoru a uvnitř článku.rb model…
class Article < ActiveRecord::Baseend
Krok 7: Uvnitř konzoly Rails
Nyní můžeme skočit dovnitř konzoly Rails a otestovat připojení k tabulce…
$ rails c
Poté zavolejte všechny články…
$ Article.all
Měli byste vidět dotaz SQL, který vypadá takto…

(Pokud jste uvnitř příkazového řádku procházeli adresářem blogu, může se zde objevit chyba. Ujistěte se, že jste se dostali zpět do adresáře aplikace, jinak váš příkaz Article.all níže vrátí chybu.)
Při zadání pouze ‚Article‘ získáte všechny atributy tabulky…

Další příkazy…
article = Article.new
Vytvoří nový článek uložený uvnitř proměnné ‚article‘ s atributy:

Nyní můžeme přidat název a popis ručně prostřednictvím konzoly rails…

Nyní musíme tato data uložit..
article.save
Tento příkaz vygeneruje SQL dotaz, který tyto nové hodnoty vloží do tabulky článků…

Můžeme vytvořit další článek najednou pomocí „hromadného přiřazení“…
article = Article.new(title: "This is my second article", description: "This is my second description")
Znovu musíme článek uložit….
article.save
Vaľe…

Můľeme to udělat i třetím způsobem pomocí metody „create“…
Article.create(title: "This is my third title", description: "This is my third description")
A to se článek automaticky uloží…

Nyní si představme, že chceme jeden z těchto článků upravit… Nejprve musíme článek uchopit…
article = Article.find(2)

Pak můžeme článek upravit a uložit…
article.title = "This is an edited second article"
A pak uložit…
article.save
Vygeneruje se potřebný dotaz SQL…

Nyní budeme článek mazat… Nejprve uchopte článek…
article = Article.find(3)
Poté smažte…
article.destroy
Vymažte…

Krok č. 8: Přidání validací pro vynucení omezení na články
V článku.rb modelu…
class Article < ActiveRecord::Base
validates :title, presence: trueend
To bude vyžadovat, aby všechny nové články obsahovaly název. Můžeme to otestovat v konzoli rails (nezapomeňte po aktualizaci modelu restartovat konzoli rails! Díky Mikeu Boydovi a Andrew Linckovi za připomenutí)…
article = Article.new
poté zkuste uložit bez aktualizace nadpisu…
article.save
bum…

To samé můžeme udělat pro popis…
class Article < ActiveRecord::Base
validates :title, presence: true
validates :description, presence: trueend
A zabrání to vytvoření článku bez popisu, i když má nadpis… (opět nezapomeňte po aktualizaci modelu restartovat konzoli rails.)

Chyby si můžete zkontrolovat pomocí těchto příkazů…
article.errors.any?
article.errors.full_messages
Příště přidáme validace délky…
Cool.
Dále chceme, aby uživatelé mohli provádět stejné akce v prohlížeči, takže budeme muset nastavit trasy, řadiče a pohledy pro vytváření a ukládání článků!
Krok č. 9: Přidání možnosti vytvářet články z prohlížeče
Životní cyklus nového článku…

Přečtěte si první 2 minuty kurzu Udemy v části 4, přednáška 63 pro úplný přehled…
Nejprve se vypořádáme s našimi trasami…
V trasách.rb přidejte tento řádek …
resources :articles
Tím získáme nejrůznější cesty pro aktualizaci, mazání, vytváření, zobrazování atd.
Zkontrolujte nové cesty pomocí… ALE POČKEJTE, před kontrolou cest se ujistěte, že jste se vrátili z konzole rails zadáním:
exit
tedy,
$ rake routes
Cool.
Nyní potřebujeme nový kontrolér… Vytvořte tento soubor v části app/controllers.
touch articles_controller.rb#or just create the file using the visual text editor
A pak uvnitř nového souboru kontroléru…
class ArticlesController < ApplicationControllerend
Nyní musíme vytvořit novou složku pod pohledy, kam budeme ukládat naše soubory s pohledy na články… Složka by se měla jmenovat ‚articles‘
<<< AKTUALIZACE OD AUTORA >>>
Zkuste místo vizuálního textového editoru použít příkazový řádek:
cd views
mkdir articles
cd articles
<<< END UPDATE >>>
Nyní vytvoříme nový soubor pod ‚articles‘ s názvem…
touch new.html.erb# or create using the visual text editor
A pak musíme aktualizovat náš articles_controller.rb:
class ArticlesController < ApplicationController
def new
end
end
Uložit.
Uvnitř této stránky new.html.erb uložíme náš formulář pro zachycení názvu a popisu.
Nejprve se ale ujistíme, že stránka funguje… Add:
<h1>Create an article</h1>
A pak načteme server…
Dává nám to…

Skvělé. Funguje to.
Nyní vytvoříme formulář s podporou modelu. Rails zde poskytuje pomocné metody pro formulář.
V souboru new.html.erb…
<h1>Create an Article</h1><%= form_for @article do |f| %><% end %>
A iniciovali jsme proměnnou instance, takže nyní musíme vytvořit proměnnou v našem kontroléru…
class ArticlesController < ApplicationControllerdef new
@article = Article.new
endend
Skvělé. Vše funguje správně…
Nyní shromáždíme nějaká data…
<h1>Create an Article</h1><%= form_for @article do |f| %>
<p>
<%= f.label :title %>
<%= f.text_field :title %>
</p><% end %>
A načteme stránku, abychom viděli, co jsme udělali…

Skvělé. Funguje to…
Teď dokončíme formulář…

Skvělé. Vše, co potřebujeme…
Nyní musíme v kontroléru vytvořit akci ‚create’…
class ArticlesController < ApplicationControllerdef new
@article = Article.new
enddef create
render plain: params.inspect
endend
Po vyplnění formuláře a následném odeslání se zobrazí tyto údaje:

Ale my chceme, aby se tato data uložila do databáze…
Ale to nestačí… Chceme také zobrazit článek…
Použijeme již vytvořenou cestu a předáme proměnnou instance nového článku…
redirect_to articles_show(@article)
Celý kód…
Ale to nestačí, že? Chceme tento kód přeformulovat tak, aby zobrazoval oznámení, zda byl článek úspěšně vytvořen:
A nyní zajistíme, aby se naše bleskové zprávy zobrazovaly na všech stránkách…
V těle souboru application.html.erb…
<% flash.each do |name, msg| %>
<ul>
<li><%= msg %></li>
</ul>
<% end %>
A nyní chceme zajistit, aby se zobrazovaly také chyby…
V souboru new.html.erb…
Skvělé. Nyní se nám zobrazí chyby v URL adresy articles/new:

Teď se ujistěte, že byla vytvořena akce show…
def show
@article = Article.find(params)
end
Teď musíme vytvořit stránku, na které se informace zobrazí…
Voláme tento soubor…
show.html.erb
Uvnitř této stránky…
<h1>Showing selected article</h1><p>
Title: <%= @article.title %>
</p><p>
Description: <%= @article.description %>
</p>
A ta bude vykreslovat…

(Chybujete? Zde je řešení časté chyby: vytvoření souboru show.html.erb na špatném místě)
Hurá. Příště se budeme věnovat úpravám článků…
Krok 10: Úprava článků
Potřebujeme vytvořit akci editace v kontroléru… Ve kterém kontroléru? Samozřejmě v kontroléru článků!
def edit
end
A v pohledech musíme vytvořit šablonu editace… Ve které složce? Samozřejmě ve složce zobrazení článků!
edit.html.erb
Nyní musíme vytvořit formulář pro editaci…
Můžeme vlastně kopírovat/vkládat z formuláře new.html.erb. Pro aktualizaci stávajícího článku použijeme stejný formulář, který jsme použili pro vytvoření nového článku.
Nyní dokončíme naši editační akci v kontroléru…
def edit
@article = Article.find(params)
end
Nyní musíme přidat aktualizační akci…
Krok 11: Přidání indexového výpisu článků a přidání odkazů na úpravu/zobrazení
Přidejte akci index v kontroléru articles_controller.rb…
def index
@articles = Article.all
end
Poté musíme vytvořit šablonu… Do kterého adresáře views tento soubor umístíme?
index.html.erb
A uvnitř tohoto souboru…
Tím získáme…

Cool. Nyní přidáme odkazy na úpravu a zobrazení jednotlivých článků…
<td><%= link_to 'Edit', edit_article_path(article) %></td>
<td><%= link_to 'Show', article_path(article) %></td>
Kód vypadá takto…
Tím získáme…

Nyní přidáme odkazy „Zpět“ k úpravám, zobrazení a nové stránce… Pokračujte, skočte do příslušných stránek a přidejte nové odkazy takto:
<%= link_to 'Back', articles_path %>
Své jsem přidal úplně na konec každého souboru.
A na stránku zobrazit přidáme odkaz upravit…
<%= link_to "Edit", edit_article_path(@article) %>
Krok 12: Přeformátování formulářů do jedné dílčí části
Vytvořte nový soubor přímo v zobrazeních/článcích.
_form.html.erb
Zkopírujte/vložte data formuláře do tohoto souboru…
Poté vykreslete formulář v nové a editační stránce…
<%= render 'form' %>
Měli byste vyřadit všechny staré informace z formuláře a přidat úryvek kódu o do nové a editační stránky tak, aby každá vypadala nějak takto:
<h1>Edit Article</h1><%= render 'form' %><%= link_to 'Back', articles_path %>
Nyní přidáme akci zničit…
Krok 13: Přidání akce zničit
V kontroléru…
Který kontrolér? To už víte.
Nyní musíme přidat odkazy na stránky, ze kterých chceme mít možnost mazat. Pomocí níže uvedeného odkazu…
<%= link_to 'Delete', article_path(article), method: :delete, data: {confirm: "Are you sure?"} %>
…přidejte na stránky, odkud chcete, aby uživatel mohl mazat.
Pokud přidám na naši indexovou stránku, bude to vypadat…
Pokud přidáme na naši stránku show, budeme muset odkaz destroy jen mírně upravit, aby napodoboval strukturu odkazu edit. Chápete, co mám na mysli?
Takto:
<%= link_to 'Delete', article_path(@article), method: :delete, data: {confirm: "Are you sure?"} %>
Místo toho:
<%= link_to 'Delete', article_path(article), method: :delete, data: {confirm: "Are you sure?"} %>
Krok 14: Refaktorizace článků Controller
Jedním z principů vývoje je DRY.
Možná už víte, co to znamená: „
Dost často se opakujeme, takže se pustíme do refaktorizace.
Tento řádek kódu se objevuje ve všech našich akcích…
@article = Article.find(params)
Vytvoříme tedy soukromou metodu a tento řádek tam uložíme…
def set_article
@article = Article.find(params)
end
Poté řádek kódu z akcí vymažeme…
Je obsažen v akcích destroy, show, update, edit…
Přímo pod prvním řádkem kontroléru…
before_action :set_article, only:
Aktualizovaný soubor kontroléru bude vypadat takto:
Krok 15: Nainstalujte Bootstrap
Přidejte soubor gemfile ze stránky github…
gem 'bootstrap-sass', '~> 3.4.1'
gem 'sassc-rails', '>= 2.1.0'
Poté v příkazovém řádku, ujistěte se, že jste v adresáři aplikace, a ne v některém z podadresářů, nainstalujte…
$ bundle install
Také budete muset vytvořit nový soubor CSS… Název souboru může vypadat takto níže a vytvoříte ho v adresáři app/assets/stylesheets
custom.css.scss
a přidáte…
Poté v aplikaci.js v souboru app/assets/javascripts…
//= require jquery
//= require bootstrap-sprockets
A pokud používáte Rails 5, nainstalujte drahokam jQuery…
gem 'jquery-rails'
Nejste si jisti, jakou verzi používáte? Spusťte v terminálu následující příkaz:
$ rails -v
Teď už to víte. Pokud potřebujete nainstalovat jquery, přidejte výše uvedený gem do souboru gemfile a nainstalujte svazek.
$ bundle install
Krok 16: Instalace navigačního panelu
Vytvořte částečný ve složce layouts…
_navigation.html.erb
Nyní přejděte na domovskou stránku bootstrapu…
Vychytejte výchozí kód navigačního panelu… Je to první příklad a vypadá nějak takto:

A vložte do svého částečného _navigation… Uložte.
Nyní vykreslete dílčí část uvnitř <head> </head> souboru application.html.erb…
<%= render 'layouts/navigation' %>
Celý soubor nyní vypadá nějak takto:
Restartujte server (na macu: control + c), protože jste nedávno přidali nějaké nové drahokamy, a pak jej znovu spusťte:
$ rails s
A když pak obnovíte místní server, uvidíte:

Niiiiiiice…. Vypadá to dobře, ne?“
Teď se pustíme do stylizace! Nebo spíše, pojďme se stylování zbavit opravdu rychle, abychom se mohli soustředit spíše na vytváření aplikace než na stylování aplikace 🙂
V souboru custom.css.scss zkopírujte/vložte a poté uložte:
Krok 17: Přidání odkazů na navigační panel
Nyní se pustíme do navigačního panelu a ujistíme se, že odkazy navigačního panelu směřují na místa, na která chceme, aby směřovaly!
Toto…
<a class="navbar-brand" href="#">Alpha Blog</a>
se změní na toto:
<%= link_to "Alpha Blog", root_path, class: "navbar-brand", id: "logo" %>
Obnovte stránku a uvidíte:

A nyní můžete na kterékoli stránce přejít na kořenovou_cestu (indexovou stránku) kliknutím na ALPHA BLOG.
Dále přidáme odkaz na stránku Index článků:
Na místo prvního „Odkazu“ v panelu navigace:
<li class="active"><a href="#">Link <span class="sr-only">(current)</span></a></li>
Přidat:
<li><%= link_to "Articles", articles_path %></li>
A místo druhého „Odkazu“ v panelu navigace:
<li><a href="#">Link</a></li>
Přidat:
<li><%= link_to "Create Article", new_article_path %></li>
Nyní můžeme odstranit druhý odkaz na „Vytvořit článek“ v indexu.html.erb. Stačí ho dohledat a odstranit.
Také odstraním vyhledávací panel. Ten nebudeme používat.
Vymažte vše níže uvedené:
První rozbalovací nabídku také nepotřebujeme, takže pryč. Stačí najít tohle a odstranit to:
Uložit soubor. Obnovte server localhost a uvidíte:

Krok 18: Nastylujte šablonu formuláře
Kód na bootstrapu najdete zde.
Smícháme vložený ruby s bootstrapem, abychom dosáhli požadovaného výsledku.
Uvnitř souboru _form.html.erb partial změňte toto…
Na toto…
Všimněte si důležité změny, kterou jsme provedli na začátku příkazu do formuláře…
<%= form_for(@article, :html => {class: "form-horizontal", role: "form"}) do |f| %>
A všimněte si syntaxe uvnitř prvků formuláře…
<%= f.text_field :title, class: "form-control", placeholder: "Title of article", autofocus: true %>
Krok 19: Stylizace zpráv & Refaktor do partialů
Nyní také aktualizujeme stylování chybových zpráv. Aktualizujte styl z…
na:
Tím se změní chybová hlášení na:

Nyní provedeme výpis na dílčí..
Vytvořte novou složku pod pohledy s názvem ‚shared’…
Vytvořte nový soubor s názvem _errors.html.erb…
Zkopírujte/vložte do tohoto souboru chybové hlášení…
Ukládejte.
Nyní odstraňte chybové hlášení z _form.html.erb a nahraďte kód:
<%= render 'shared/errors' %>
Vytvoříme také soubor _messages.html.erb a uložíme jej do sdílené složky. Uvnitř tohoto souboru přidejte kód bleskových zpráv:
<% flash.each do |name, msg| %>
<ul>
<li><%= msg %></li>
</ul>
<% end %>
Uložíme tento soubor. Ujistěte se, že jste nahradili kód v souboru layouts/application.html.erb:
<%= render 'shared/errors' %>
Celý soubor aktuálně vypadá takto:
Dále budeme stylovat zprávy flash…
V souboru _messages.html.erb dílčího souboru změňte toto…
<% flash.each do |name, msg| %>
<ul>
<li><%= msg %></li>
</ul>
<% end %>
na toto:
Pro dokončení tohoto kroku budeme muset také změnit všechny flashové soubory v souboru articles_controller.rb na flashové.
Krok 20: Aktualizace proměnných instancí článků, aby fungovaly pro uživatele
Tento krok je trochu předčasný, protože jsme pro náš blog ještě nevytvořili uživatele ani uživatelské akce, ale uživatele vytvoříme a budeme chtít, aby naše chybová hlášení fungovala pro uživatele stejně jako pro články. Víte, co mám na mysli?“
Máme všechny tyto funkce, které fungují pro články: vytváření nových článků, úpravy starých článků a chybová hlášení flash, která nás informují o tom, co se pokazilo… Chceme, aby nám tato chybová hlášení flash sdělovala, když se snažíme vytvořit nového uživatele nebo upravit stávajícího uživatele.
Dosáhneme toho tak, že aktualizujeme proměnnou instance @article na takovou, která bude fungovat pro články nebo uživatele…
V poli shared/_errors.html.erb aktualizujeme instanční proměnnou @article na instanční proměnnou @obj…
Nyní musíme aktualizovat příkaz pro částečné vykreslení… Ten v articles/_form.html.erb
Byl…
<%= render 'shared/errors' %>
a nyní musí znít…
<%= render 'shared/errors', obj: @article %>
Dále budeme pracovat na zobrazení „zobrazit“…
Krok 21: Styl stránky Zobrazit článek
Aktualizujte views/articles/show.html.erb na…
Tímto se stránka vykreslí:

Dále přidáme ‚simple_format’…
Změňte toto…
<%= @article.description %>
Na toto…
<%= simple_format(@article.description) %>
Poté ještě nějaký styl pro tlačítka…
<%= link_to "Edit", edit_article_path(@article), class: "btn btn-xs btn-primary" %> |
<%= link_to 'Back', articles_path, class: "btn btn-xs btn-success" %>
Dá nám to krásná malá tlačítka…

Pak přidáme tlačítko pro mazání…
Pěkné barevné tlačítko pro mazání…

Celý blok kódu nyní vypadá takto:
Krok 22: Stylizace indexové stránky s výpisem článků
Aktualizujeme tuto strašně blbě vypadající stránku…

Index.html.erb by měl být nahrazen následujícím kódem:
Styl pro tělo článku:
.article-body {
border-top: 1px solid #eaeaea;
padding-top: 15px;
padding-bottom: 15px;
}
Styl pro nadpis článku:
.article-title {
font-weight: bold;
font-size: 1.5em;
}
Vaše stránka bude nyní vypadat takto:

Krásně.
Krok 23: Vytvoření uživatelů + vytvoření feature větve v Githubu
Následuje vytvoření uživatelů! Super. Náš model pro uživatele se bude jmenovat „User“. Níže je užitečná tabulka, která vysvětluje, jak bude tabulka uživatelů formátována a jaké budou různé struktury pojmenování souborů:

Články jsme již vytvořili. Můžeme vytvářet, číst, upravovat a mazat články.
Ale právě teď může kdokoli, kdo má přístup na blog, číst, upravovat a mazat jakýkoli jiný článek.
Chceme, aby tyto funkce mohli provádět pouze uživatelé, kteří se zaregistrovali, a chceme, aby mohli upravovat a mazat pouze články, které vytvořili.
Takže samozřejmě potřebujeme uživatele a také potřebujeme způsob, jak sledovat uživatele, kteří vytvářejí články. To lze provést tak, že id uživatele, který článek vytvořil, bude uloženo v tabulce článků v řádku článku. Jedná se o asociaci cizího klíče:

Přidáním sloupce user_id do tabulky articles získáme možnost „v-lookup“ na ostatní informace o uživatelích.

Jeden článek, na kterém pracuje více lidí, by byl asociací mnoho k mnoha…
Jeden článek, na kterém pracuje jeden člověk, přičemž jeden člověk může vytvořit mnoho článků, je asociací one-to-many…
Kategorie článků, pokud bychom je vytvořili, by byly asociací many-to-many.
Ok, dost žertování, pojďme vytvořit tabulku Uživatel…