Gravatar хелпер
На данный момент, Gravatar отображается правильно, но последний пример из Листинга 7.18 до сих пор не проходит. Это потому, что класс "gravatar"
, который мы хотим использовать в CSS для Gravatar, еще не присутствует в теге img
Gravatar-а. Мы можем заставить тест пройти, включив опцию в метод gravatar_image_tag
:
<%= gravatar_image_tag @user.email, :class => "gravatar" %>
С другой стороны, так как мы ожидаем, что Gravatar будет использоваться в нескольких местах нашего приложения, вставлять класс повсеместно вручную было бы повторением. Лучше сделать вспомогательный метод для ликвидации этого дублирования в зародыше.
Это может напомнить вам ситуацию с повторением в базовом заголовке сайта (“Ruby on Rails Tutorial Sample App”), которую мы решили с title
помощником в Application helper (Листинг 4.2). Решение здесь аналогично; так как Gravatars естественным образом связаны с пользователями, мы определим gravatar_for
метод в Users helper. (Users helpers выбран вместо Application helper только для концептуального удобства; Rails делает все помощники доступными во всех представлениях.) результатом будет сокращение кода представления
<%= gravatar_for @user %>
gravatar_for
помощник должен принимать объект user
а затем передавать некоторые дефолтные параметры помощнику gravatar_image_tag
. Реализация представлена в Листинге 7.23.
gravatar_for
хелпер. app/helpers/users_helper.rb
module UsersHelper
def gravatar_for(user, options = { :size => 50 })
gravatar_image_tag(user.email.downcase, :alt => user.name,
:class => 'gravatar',
:gravatar => options)
end
end
Первый аргумент в вызове gravatar_image_tag
передает строчную версию пользовательского email адреса (используя метод downcase
).22 Затем первая опция gravatar_image_tag
присваивает пользовательское имя атрибуту alt
тега img
(который отображается в устройствах не показывающих изображения), в то время как вторая опция устанавливает CSS класс получившегося Gravatar. Третья опция передает хэш options
используя ключ :gravatar
, который (в соответствии с gravatar_image_tag гем документацией) is how to set the options (??) для gravatar_image_tag
. отметьте что определение функции устанавливает дефолтную опцию23 для размера Gravatar24 используя
option = { :size => 50 }
Что устанавливает дефолтный размер Gravatar 50x50, а также позволяет переопределить размер по умолчанию с помощью кода
<%= gravatar_for @user, :size => 30 %>
Если мы сейчас обновим user show шаблон с кодом из Листинга 7.24, страница показывающая пользователя будет выглядеть как в Рис. 7.6. И так как gravatar_for
помощник назначает img
тегу класс "gravatar"
, тесты из Листинга 7.18 теперь должны пройти.
gravatar_for
.app/views/users/show.html.erb
<h1>
<%= gravatar_for @user %>
<%= @user.name %>
</h1>