# coding: utf-8

7.3.3 Боковая панель пользователя

Хотя наши тесты в настоящее время проходит, и страница пользователя значительно улучшилась, все же хорошо бы ее еще немного отполировать. В Листинге 7.25, у нас есть таблица в table теге с одной строкой (tr) и двумя ячейками (td).25

Листинг 7.25. Добавление сайдбара к user show представлению.
app/views/users/show.html.erb
<table class="profile" summary="Profile information">
  <tr>
    <td class="main">
      <h1>
        <%= gravatar_for @user %>
        <%= @user.name %>
      </h1>
    </td>
    <td class="sidebar round">
      <strong>Name</strong> <%= @user.name %><br />
      <strong>URL</strong>  <%= link_to user_path(@user), @user %>
    </td>
  </tr>
</table>

Здесь мы использовали HTML тег перевода строки <br /> чтобы разделить имя пользователя и URL. Также обратите внимание на использование user_path для создания кликабельной ссылки позволяющей пользователям легко обмениваться URL своих профайлов. Это лишь один из многих именованных маршрутов (Раздел 5.2.2) связанных с ресурсом User (Листинг 6.26); мы увидим много больше в следующих главах. Код

user_path(@user)

возвращает путь к пользователю, в данном случае /users/1. Связанный код

user_url(@user)

просто возвращает весь URL, //localhost:3000/users/1. (Сравните с маршрутами созданными в Разделе 5.2.2.) Оба примера именнованных маршрутов созданы ресурсом пользователей в Листинге 6.26; список всех именованных маршрутов представлен в Таблице 7.1.

Named routePath
users_path/users
user_path(@user)/users/1
new_user_path/users/new
edit_user_path(@user)/users/1/edit
users_url//localhost:3000/users
user_url(@user)//localhost:3000/users/1
new_user_url//localhost:3000/users/new
edit_user_url(@user)//localhost:3000/users/1/edit

Table 7.1: Именованные маршруты обеспеченные ресурсом пользователи в Листинге 6.26.

Отметим, что в

<%= link_to user_path(@user), @user %>

user_path(@user) это текст ссылки, в то время как адрес это просто @user. В контексте link_to, Rails преобразует @user в соответствующий URL; другими словами, код выше эквивалентен коду

<%= link_to user_path(@user), user_path(@user) %>

В любом случае хорошо работает, но, как и в :id => @user идиоме из Листинга 7.17, использование просто @user это общепринятая Rails конвенция. В обоих случаях, Embedded Ruby производит HTML

<a href="/users/1">/users/1</a>

С HTML элементами и CSS классами, мы можем отстилить show страницу с CSS показанным в Листинг 7.26. Получившаяся страница показана в Рис. 7.7.

Листинг 7.26. CSS для стиля страницы показывающей пользователя, включающий сайдбар.
public/stylesheets/custom.css
.
.
.

/* User show page */

table.profile {
  width: 100%;
  margin-bottom: 0;
}

td.main {
  width: 70%;
  padding: 1em;
}

td.sidebar {
  width: 30%;
  padding: 1em;
  vertical-align: top;
  background: #ffc;
}

.profile img.gravatar {
  border: 1px solid #999;
  margin-bottom: -15px;
}
user_show_sidebar_css

Рисунок 7.7: Страница показывающая пользователя /users/1с сайдбаром и CSS. (полный размер)
# coding: utf-8