Rails 3 - идеальный способ установить заголовок страницы - PullRequest
70 голосов
/ 17 июня 2010

Как правильно установить заголовок страницы в рельсах 3. В настоящее время я делаю следующее:

app / views / layouts / application.html:

<head>
  <title><%= render_title %></title>
  <%= csrf_meta_tag %>

app/helpers/application_helper.rb:

def render_title
  return @title if defined?(@title)
  "Generic Page Title"
end

app / controllers / some_controller.rb:

def show
  @title = "some custom page title"
end

Есть ли другой / лучший способ сделать это выше?

Ответы [ 13 ]

0 голосов
/ 31 марта 2015

Я думал, что это будет хорошо:

<title>
    <% if @title %>
      <%= @title %>
    <% else %>
      Your title
    <% end %>
</title>

И задайте значение @title в вашем контроллере, иначе заголовок будет Your title

0 голосов
/ 09 февраля 2015

У меня есть несколько более сложное решение.Я хочу управлять всеми своими заголовками в файлах локалей.Я также хочу включить значимые заголовки для страниц показа и редактирования так, чтобы название ресурса было включено в заголовок страницы.Наконец, я хочу включить название приложения в каждый заголовок страницы, например, Editing user Gustav - MyApp.

. Для этого я создаю помощника в application_helper.rb, который выполняет большую часть тяжелой работы.Он пытается получить имя для данного действия из файла локали, имя для назначенного ресурса, если таковой имеется, и объединяет их с именем приложения.

# Attempt to build the best possible page title.
# If there is an action specific key, use that (e.g. users.index).
# If there is a name for the object, use that (in show and edit views).
# Worst case, just use the app name
def page_title
  app_name = t :app_name
  action = t("titles.#{controller_name}.#{action_name}", default: '')
  action += " #{object_name}" if object_name.present?
  action += " - " if action.present?
  "#{action} #{app_name}"
end

# attempt to get a usable name from the assigned resource
# will only work on pages with singular resources (show, edit etc)
def object_name
  assigns[controller_name.singularize].name rescue nil
end

Вам нужно будет добавить тексты для конкретных действий в файлы локали в следующей форме:

# en.yml 
titles:
  users:
    index: 'Users'
    edit: 'Editing'

И если вы хотите использовать значимые имена ресурсов в своих единичных представлениях, вы можетенужно добавить пару методов прокси, например

# User.rb
def name
  username
end
0 голосов
/ 03 января 2013

Вы также можете проверить это railscast . Я думаю, что это будет очень полезно и даст вам базовый старт.

ПРИМЕЧАНИЕ. Если вам нужно больше динамических страниц с помощью pjax

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...