Rails: Как изменить название страницы?

Каков наилучший способ создания пользовательского заголовка для страниц в приложении Rails без использования плагина?

Ответ 1

В ваших представлениях сделайте что-то вроде этого:

<% content_for :title, "Title for specific page" %>
<!-- or -->
<h1><%= content_for(:title, "Title for specific page") %></h1>

В файле макета идет следующее:

<head>
  <title><%= yield(:title) %></title>
  <!-- Additional header tags here -->
</head>
<body>
  <!-- If all pages contain a headline tag, it preferable to put that in the layout file too -->
  <h1><%= yield(:title) %></h1>
</body>

Также можно инкапсулировать операторы content_for и yield(:title) в вспомогательные методы (как уже указывали другие). Однако в простых случаях, таких как этот, я хотел бы поместить необходимый код непосредственно в конкретные представления без пользовательских помощников.

Ответ 2

Вот простой вариант, который мне нравится использовать

В вашем макете

<head>
  <title><%= @title %></title>
</head>

И в верхней части шаблона страницы (первая строка)

<% @title="Home" %>

Из-за того, как разрисовываются макеты и шаблоны страниц, перед тем, как будет отображаться макет, будет оценен заголовок @title= "Home".

Ответ 3

Лучшей практикой является использование content_for.

Сначала добавьте несколько вспомогательных методов (например, stick в app/helpers/application_helper.rb):

def page_title(separator = " – ")
  [content_for(:title), 'My Cool Site'].compact.join(separator)
end

def page_heading(title)
  content_for(:title){ title }
  content_tag(:h1, title)
end

Затем в вашем макете вы можете просто использовать:

<title><%= page_title %></title>

... и в самом представлении:

<%= page_heading "Awesome" %>

Преимущество этого способа заключается в том, что вы можете перетасовывать туда, где вы прикрепляете тег h1 для своего заголовка, и держите ваш контроллер красивым и свободным от надоедливых переменных @title.

Ответ 4

Улучшение на @opsb и более полная форма @FouZ's:

В application.html.erb:

<title><%= @title || "Default Page Title" %></title>

В файле erb просмотра или его контроллере:

<% @title = "Unique Page Title" %>

Ответ 6

Без дополнительной информации о прецеденте или требованиях, которые вы пытаетесь удовлетворить, я могу представить несколько альтернатив:

1) Переключите заголовок на одной из ваших страниц макета и используйте вспомогательный метод, хранящийся в application_helper.rb

<title><%= custom_title %></title>

Этот подход даст вам уникальный заголовок для каждой страницы макета.

2) Railscasts предлагает использовать частичный для загрузки то, что отображается между тегами HEAD

3) Используйте javascript/ajax-вызовы для управления DOM, если вам нужно изменить заголовок после события загрузки.

Возможно, вы действительно не хотите изменять контент, помеченный элементом title. Возможно, вам действительно нужна сводка, так что ваши пользователи всегда знают, где они относятся к вашей иерархии навигации вашего сайта. Хотя я отлично справлялся с плагином goldberg, я уверен, что есть другие способы отменить ту же функциональность.

Ответ 7

Я использую nifty_generator "nifty_layout", который предоставляет переменную title, которую я могу вызвать на странице, используя:

<% title "Title of page" %>

Я также могу пользователь <% title "Title of page", false %>, чтобы заголовок отображался только в заголовке браузера, а не на самой странице.

Ответ 8

Вы также можете установить его в файле before_filter в своем контроллере.

# foo_controller.rb

class FooController < ApplicationController

  before_filter :set_title

  private

  def set_title
    @page_title = "Foo Page"
  end

end

# application.html.erb

<h1><%= page_title %></h1>

Затем вы можете установить условия в методе set_title, чтобы установить разные заголовки для разных действий в контроллере. Приятно видеть все соответствующие заголовки страниц в вашем контроллере.

Ответ 10

Лучший/чистый способ сделать это:

<title><%= @page_title or 'Page Title' %></title>

Ответ 11

подход для титрования страницы с использованием метода content_for и частичного

1. частичное имя: _page_title.html.erb

<%content_for :page_title do %>
 <%=title%>
<%end%>

2. Использование в теге title.html.erb внутри тега

   <title><%=yield :page_title %></title>

3. Использование в соответствующем *.html.erb исключая application.html.erb     Просто вставьте это в любой .html.erb и укажите заголовок страницы

    e.g : inside index.html.erb

    <%=render '_page_title', title: 'title_of_page'%>

Ответ 12

Короче говоря, я могу записать это, следуя

<%content_for :page_title do %><%= t :page_title, "Name of Your Page" %> <% end %>

Ответ 13

Я хотел бы добавить свой довольно простой вариант.

В ApplicationController определите этот метод:

  def get_title
    @action_title_name || case controller_name
                            when 'djs'
                              'Djs'
                            when 'photos'
                              'Photos'
                            when 'events'
                              'Various events'
                            when 'static'
                              'Info'
                            when 'club'
                              'My club'
                            when 'news'
                              'News'
                            when 'welcome'
                              'Welcome!'
                            else
                              'Other'
                          end
  end

После этого вы можете вызвать get_title из тега заголовка макета. Вы можете определить более конкретное название для своей страницы, указав в своих действиях переменную @action_title_name.