Направляющие: Как изменить заголовок страницы?

Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  1. Вызов метода экземпляра объекта null.
  2. Доступ или изменение поля объекта null.
  3. Принимая длину null, как если бы это был массив.
  4. Доступ или изменение слотов null, как если бы это был массив.
  5. Бросок null как будто это было значение Throwable.

Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null.

Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html

156
задан Flip 2 November 2016 в 16:58
поделиться

7 ответов

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

<% 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's preferable to put that in the layout file too -->
  <h1><%= yield(:title) %></h1>
</body>

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

237
ответ дан Christoph Schiessl 23 November 2019 в 21:48
поделиться

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

Первый, добавьте несколько вспомогательных методов (т.е. всуньте 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 переменных.

49
ответ дан Aupajo 23 November 2019 в 21:48
поделиться

Изучите content_for: http://railscasts.com/episodes/8

13
ответ дан Avdi 23 November 2019 в 21:48
поделиться

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

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

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

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

2) Railscasts предлагает использовать частичное для загрузки то, что обнаруживается между ГЛАВНЫМИ тегами

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

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

6
ответ дан Alan 23 November 2019 в 21:48
поделиться

Можно также установить его в 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 для установки различных заголовков для различных действий в контроллере. Хорошо быть в состоянии видеть все соответствующие названия страницы в Вашем контроллере.

2
ответ дан JasonOng 23 November 2019 в 21:48
поделиться

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

В 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 переменной в действиях.

-9
ответ дан IDBD 23 November 2019 в 21:48
поделиться

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

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

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

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

<% @title="Home" %>

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

118
ответ дан 23 November 2019 в 21:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: