Potrzebujemy kontroler i widoki, żeby obsłużyć nowy model. Wygenerujmy kontroler:
rails g controller Authors
Ale to jest pusty kontroler bez żadnej akcji.
Możemy wygenerować:
rails g controller Authors index new create
Teraz mamy kontroler ze szkieletem 3 akcji i 3 puste widoki odpowiadające tym akcjom.
Możemy wygenerować cały CRUD:
rails g controller Authors index new create edit update show destroy
Ale możemy wygenerować cały CRUD razem z widokami za jednym zamachem:
rails g scaffold Author name: string surname:string
Teraz mamy ciała metod w kontrolerze, gotowe widoki i dodany wpis do pliku: routes.rb
resources :authors
Co załatwia nam routing adresów. Do routingu wrócę w jednym z kolejnych wpisów.
Index
W kontrolerze, metoda index wygląda tak:
def index
@authors = Author.all
end
I nie potrzebuję jej zmieniać.
Widok views/authors/index.html.erb po wygenerowaniu:
<p id="notice"><%= notice %></p>
<h1>Authors</h1>
<table>
<thead>
<tr>
<th>Name</th>
<th>Surname</th>
<th colspan="3"></th>
</tr>
</thead>
<tbody>
<% @authors.each do |author| %>
<tr>
<td><%= author.name %></td>
<td><%= author.surname %></td>
<td><%= link_to 'Show', author %></td>
<td><%= link_to 'Edit', edit_author_path(author) %></td>
<td><%= link_to 'Destroy', author, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
</tbody>
</table>
<br>
<%= link_to 'New Author', new_author_path %>
A zmieniam go na:
<h3>Authors</h3>
<p><%= link_to "New author", new_author_path, class: "btn btn-success" %> </p>
<table class="table table-stripped">
<thead>
<tr>
<th>Name</th>
<th>Surname</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
<% @authors.each do |author| %>
<tr>
<td><%= author.name %></td>
<td><%= author.surname %></td>
<td>
<%= link_to "Show", author_path(author), class: "btn btn-default btn-xs" %>
<%= link_to "Edit", edit_author_path(author), class: "btn btn-primary btn-xs" %>
<%= link_to "Delete", author_path(author), method: :delete, class: "btn btn-danger btn-xs", data: { confirm: "Are you sure?" } %>
</td>
</tr>
<% end %>
</tbody>
</table>
Czyli korzystam z bootstrapa, a link tworzenia nowego autora przeniosłem na górę. Usunąłem też ’notice”, ale do tego wrócę w kolejnej części, kiedy zajmiemy się dodawaniem/edycją autora
Jeden komentarz do “Ror cz. 3 – kontrolery i widoki”