# coding: utf-8

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.

sqlite_user_row

Рисунок 6.8: Строка user в базе данных SQLite db/development.sqlite3(полный размер)

Далее идет представление, которое отличается минимализмом, чтобы подчеркнуть, что это просто демонстрация (Листинг 6.24). Мы используем стандартное расположение Rails для представления show, app/views/users/show.html.erb; в отличие от представления new.html.erb которое мы создали генератором в Листинге 5.23, show.html.erb файл в настоящее время не существует, так что вам придется создать его вручную.

Листинг 6.24. Представление–заглушка для отображения информации о пользователе.
app/views/users/show.html.erb
<%= @user.name %>, <%= @user.email %>

Это представление использует Embedded Ruby для отображения имени пользователя и адреса электронной почты, предполагая существование переменной экземпляра @user. Конечно, в итоге реальная страница для отображения пользователя будет выглядеть совсем иначе, и не будет показывать публично адрес электронной почты.

Наконец, мы добавим show действие в контроллер Users (направляющий в show.html.erb представление) с кодом в Листинге 6.25, который определяет переменную экземпляра @user, необходимую представлению.

Листинг 6.25. Users контроллер с 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, как мы увидим в следующем разделе.

# coding: utf-8