Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:
null
. null
. null
, как если бы это был массив. null
, как если бы это был массив. null
как будто это было значение Throwable. Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null
.
Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html
В Ваших представлениях делают что-то вроде этого:
<% 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)
операторы во вспомогательных методах (как другие уже предположили). Однако в простых случаях, таких как этот мне нравится помещать необходимый код непосредственно в определенные представления без пользовательских помощников.
Лучшая практика должна использовать 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 переменных.
Изучите content_for
: http://railscasts.com/episodes/8
Без более подробной информации о примере использования или требованиях, чтобы Вы попытались удовлетворить, я могу думать о нескольких альтернативах:
1) Переключатель заголовок на одной из Ваших страниц расположения и использует вспомогательный метод, сохраненный в application_helper.rb
<title><%= custom_title %></title>
, Этот подход даст Вам уникальный заголовок для каждой страницы расположения.
2) Railscasts предлагает использовать частичное для загрузки то, что обнаруживается между ГЛАВНЫМИ тегами
3), Использование javascript/ajax звонит для управления DOM, если необходимо изменить заголовок после события загрузки.
, Возможно, Вы действительно не хотите изменять содержание, отмеченное title
элемент. Возможно, Вам действительно нужна какая-то навигационная цепочка, так, чтобы Ваши пользователи всегда знали, где они относительно иерархии навигации Вашего сайта. В то время как я сделал прекрасный с тем, как goldberg плагин, я уверен, что существуют другие способы осуществить ту же функциональность.
Можно также установить его в 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 для установки различных заголовков для различных действий в контроллере. Хорошо быть в состоянии видеть все соответствующие названия страницы в Вашем контроллере.
Я хотел бы добавить свой довольно простой вариант.
В 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 переменной в действиях.
Вот простой вариант, который мне нравится использовать
В вашем макете
<head>
<title><%= @title %></title>
</head>
И в верхней части шаблона страницы (первая строка)
<% @title="Home" %>
Из-за способа макета и шаблоны страниц анализируются, @ title = "Home" оценивается перед визуализацией макета.