6.3.2 User модель, представление, контроллер
Для того, чтобы сделать страницу для просмотра пользователя, мы будем использовать модель User чтобы внести его в базу данных, сделаем представление чтобы демонстрировать некоторую информацию о пользователе, а затем добавим действие в контроллер Users для обработки браузером. Иными словами, в первый раз в этом учебнике, мы будем видеть в одном месте все три элемента модель-представление-контроллер архитектуры, впервые обсуждавшейся в Разделе 1.2.6.
Наш первый шаг состоит в создании пользователя с помощью консоли, позаботимся, о том чтобы не работать в песочнице с этого времени, чтобы сохранить запись в базе данных:
$ rails console
Loading development environment (Rails 3.0.7)
>> User.create!(:name => "Michael Hartl", :email => "[email protected]")
=> #<User id: 1, name: "Michael Hartl", email: "[email protected]",
created_at: "2010-01-07 23:05:14", updated_at: "2010-01-07 23:05:14">
Чтобы перепроверить, что это работает, давайте посмотрим на строку в development базе данных с помощью SQLite Database Browser (Рис. 6.8). Обратите внимание, что столбцы соответствуют атрибутам модели данных, определеной в Разделе 6.1.
Далее идет представление, которое отличается минимализмом, чтобы подчеркнуть, что это просто демонстрация (Листинг 6.24). Мы используем стандартное расположение Rails для представления show, app/views/users/show.html.erb
; в отличие от представления new.html.erb
которое мы создали генератором в Листинге 5.23, show.html.erb
файл в настоящее время не существует, так что вам придется создать его вручную.
app/views/users/show.html.erb
<%= @user.name %>, <%= @user.email %>
Это представление использует Embedded Ruby для отображения имени пользователя и адреса электронной почты, предполагая существование переменной экземпляра @user
. Конечно, в итоге реальная страница для отображения пользователя будет выглядеть совсем иначе, и не будет показывать публично адрес электронной почты.
Наконец, мы добавим show
действие в контроллер Users (направляющий в show.html.erb
представление) с кодом в Листинге 6.25, который определяет переменную экземпляра @user
, необходимую представлению.
show
действием.app/controllers/users_controller.rb
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
end
def new
@title = "Sign up"
end
end
Здесь мы немного забежали вперед, использовав стандартный Rails объект params
для получения id пользователя. Когда мы сделаем соответствующий запрос в контроллер Users, params[:id]
id пользователя будет 1
, так что эффект такой же, как от find
команды
User.find(1)
которую мы видели в Разделе 6.1.4.
Хотя представление и действие для show
определены, мы все еще не имеем способа увидеть саму страницу. Это требует определения надлежащего правила в Rails файле routes.rb, как мы увидим в следующем разделе.