В Rails 3: может ли изображение шаблона быть связано с отображаемым видом? - PullRequest
1 голос
/ 26 января 2011

Извините, я очень новичок в Rails, поэтому постараюсь быть как можно более конкретным.

В моем шаблоне у меня большое изображение в стиле "заголовка".Я хотел бы заменить это изображение на другое изображение, которое связано с отображаемым видом.Может быть, это можно сделать с помощью помощника?Я даже не знаю, с чего начать.

Я знаю, что мог бы создать кучу страниц шаблонов и загрузить каждую из них с желаемым видом, но я думаю, что это много повторяющихся строк кода длязагрузить, когда я просто хочу поменять одно изображение.У кого-нибудь есть идея?

1 Ответ

2 голосов
/ 26 января 2011

Есть несколько вариантов в зависимости от ваших потребностей. Первое, что приходит мне в голову, - это создать пару вспомогательных методов. Один для вызова из ваших пользовательских представлений и один для вызова из вашего глобального макета.

Например, создать файл app/helpers/layout_helper.rb

module LayoutHelper
  def header_image_tag
    @header_image ||= 'whatever-my-default-image-is.png'
    image_tag @header_image
  end

  def header_image(image_path)
    @header_image = image_path
  end
end

В вашем файле макета ... например, app/views/application.html.erb. Что-то вроде:

<div id='banner'>
  <%= header_image_tag %>
</div>

В ваших отдельных файлах просмотра вы не хотите, чтобы изображение по умолчанию:

<% header_image 'other-image.png' %>

Это должно начать вас. Возможно, вы захотите разрешить header_image_tag использовать некоторые опции для передачи на image_tag или установить некоторые значения по умолчанию, которые можно переопределить.

Другая вещь, которой вы можете воспользоваться - это блоки content_for и yield.

Пример ... в ваших пользовательских представлениях вы можете поместить что-то вроде этого в верхней части вашего представления:

<% content_for :banner do %>
  <%= image_tag 'blah.png' %>
<% end %>

А в вашем макете

<div id='banner'>
  <%= yield :banner || image_tag 'my-default.png' %>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...