вагон-ресторан БОРИС ВОЛЬФСОН Спецвыпуск: Хакер, номер #073, стр. 073-060-3 Используем скаффолдинг class DiskController < ApplicationController scaffold: disk end Теперь можем идти по адресу http://127.0.0.1:3000/Disk/new, где увидим форму для заполнения данных о диске. После создания нескольких дисков можно посмотреть их список здесь: http://127.0.0.1:3000/Disk/list. Вот так вот, всего одна строчка кода оживила нашу программу! [шаблоны-представления.] Не знаю, как читателям, а мне не очень нравится стандартный дизайн и нерусские слова, поэтому попробуем это исправить. Определим, какие данные должен получать шаблон: Передаем в шаблон список дисков class DiskController < ApplicationController scaffold :disk def list @disks = Disk.find_all end end Затем пишем сам шаблон, который больше похож на обычный HTML-файл: Шаблон для списка дисков <html> <head> <title>Список дисков</title> </head> <body> <h1>Список дисков</h1> <table border="1"> <tr> <th>Название</th> <th>Исполнитель</th> <th>Дата выпуска</th> </tr> <% @disks.each do |disk| %> <tr> <td><%= link_to disk.title, :action => "show", :id => disk.id %></td> <td><%= disk.artist %></td> <td><%= disk.date %></td> </tr> <% end %> </table> <p><%= link_to "Внести новый альбом", :action => "new" %></p> </body> </html> Для начала поясню конструкцию <% @disks.each do |disk| %> - это «встроенный» Раби-код, который перебирает все диски и присваивает поочередно все значения переменной disk, которая затем выводится на экран. И еще один краткий комментарий по поводу функции: link_to – это функция для создания ссылок. Если ты заметил, у меня появилось новое поле artist – исполнитель: я просто внес изменения в базу данных, а Раби сделал остальное! [связь таблиц.] Хотелось бы продемонстрировать, как RoR работает со связанными таблицами. Каждому альбому мы присвоим жанр: Таблица для хранения жанров CREATE TABLE `genres` ( `id` tinyint(4) NOT NULL auto_increment, `title` varchar(255) NOT NULL default '', PRIMARY KEY (`id`), UNIQUE KEY `title` (`title`) ) TYPE=MyISAM; Чтобы создать связь таблиц, нам надо поработать с моделями: Файл disk.rb class Disk < ActiveRecord::Base belongs_to :genre end Файл genre.rb class Genre < ActiveRecord::Base has_many :disk end Таким простым способом мы выразили отношение один-ко-многим. Думаю, что запись может понять любой, кто владеет английским или является программистом. [редактирование диска.] Завершающим этапом будет создание формы для редактирования информации о диске. Хотелось бы видеть список жанров с возможностью выбора, для этого сначала правим контроллер: Пересылка в шаблон дополнительных данных при редактировании class DiskController < ApplicationController scaffold :disk def list @disks = Disk.find_all |