6.3.3 Ресурс Users
Наш метод для отображения страницы пользователя будет следовать соглашениям REST архитектуры, одобренной в приложениях Rails. Этот стиль основан на идеях передачи состояния представления определенный и названный ученым Roy Fielding в его докторской диссертации Architectural Styles and the Design of Network-based Software Architectures.24 REST стиль подчеркивает представление данных как ресурсов которые могут быть созданы, показаны, обновлены, или уничтожены—четыре действия, соответствующие четырем фундаментальным операциям POST, GET, PUT, и DELETE определенным стандартом HTTP (Блок 3.1).
Следуя принципам REST, на ресурсы обычно ссылаются, используя имя ресурса и уникальный идентификатор. Что это означает в контексте пользователей—о которых мы теперь думаем, как о ресурсе Users—то, что мы должны показать пользователя с id 1 выдав GET запрос к URL /users/1. Здесь show действие неявно в типе запроса—когда Rails’ функции REST активированы, GET запросы автоматически обрабатываются show действием.
К сожалению, URL /users/1 еще не работает из-за ошибки маршрутизации (Рис. 6.9). Мы можем получить REST-style Users URL на работу, добавив пользователей в качестве ресурса для config/routes.rb, как видно в Листинге 6.26.
config/routes.rb SampleApp::Application.routes.draw do
resources :users
match '/signup', :to => 'users#new'
.
.
.
end
После добавления маршрутов для ресурса Users, URL /users/1 работает отлично (Рис. 6.10).

Вы, возможно, заметили, что Листинг 6.26 удалил строку
get "users/new"
последний раз замеченную в Листинге 5.29. Это потому что одна дополнительная строка ресурса в Листинге 6.26 не просто добавляет работающий /users/1 URL; она обеспечивает наш пример приложения всеми действиями, необходимыми для RESTful (полностью REST) ресурса Users,25 наряду с большим количеством именованных маршрутов (Раздел 5.2.3) для того, чтобы генерировать URL пользователя. Получившееся соответствие URL, действий, и именованных маршрутов показано в Таблице 6.2. (сравните с Таблицей 2.2.) В течение следующих трех глав, мы охватим остальные записи в Таблице 6.2 поскольку мы заполним все действия, необходимые, чтобы сделать Users полностью RESTful ресурсом.
| HTTP запрос | URL | Действие | Именованный маршрут | Назначение |
|---|---|---|---|---|
| GET | /users | index | users_path | страница, показывающая список пользователей |
| GET | /users/1 | show | user_path(1) | страница показывающая пользователя с id 1 |
| GET | /users/new | new | new_user_path | страница для создания нового пользователя (signup) |
| POST | /users | create | users_path | создание нового пользователя |
| GET | /users/1/edit | edit | edit_user_path(1) | страница для редактирования пользователя с id 1 |
| PUT | /users/1 | update | user_path(1) | обновление пользователя с id 1 |
| DELETE | /users/1 | destroy | user_path(1) | удаление пользователя с id 1 |
params в debug
Прежде, чем оставить страницу, показывающую пользователя, мы займем одну минуту, чтобы исследовать отладочную информацию, произведенную Листингом 6.23. Если Вы присмотритесь к Рис. 6.10, то Вы увидите, что он включает полезную информацию об отображаемой странице:26
--- !map:ActiveSupport::HashWithIndifferentAccess
action: show
id: "1"
controller: users
Это YAML27 представление params, которое (как намекает название HashWithIndifferentAccess) в основном хэш. Мы видим, что его контроллер это users, его действие это show, и его id атрибут это "1". Хотя вы будете редко иметь возможность использовать params[:controller] или params[:action], использование params[:id] для вытаскивания id из URL является общепринятой идиомой Rails. В частности, мы использовали код
User.find(params[:id])
в Листинге 6.25 чтобы найти пользователя с id 1. (find метод знает, как преобразовать строку "1" в целое число 1.)
Debug информация часто обеспечивает полезную обратную связь, при разработке приложений Rails, и я предлагаю привыкнуть проверять ее всякий раз, когда Ваше приложение ведет себя не так как ожидалось.
