Заголовки рельсов
Мне не нравится, как rails делает заголовки страниц по умолчанию (просто использует имя контроллера), поэтому я работаю над новым способом сделать это так:
контроллер приложения:
def page_title
"Default Title Here"
end
Контроллер сообщений
:
def page_title
"Awesome Posts"
end
макет приложения:
<title><%=controller.page_title%></title>
Это хорошо работает, потому что, если у меня нет метода page_title в любом контроллере, который я сейчас использую, он возвращается к умолчанию в контроллере приложения. Но что, если в моем контроллере пользователей я хочу, чтобы он возвращал "Регистрация" для "нового" действия, но отступал за любое другое действие? Есть ли способ сделать это?
Во-вторых, есть ли у кого-нибудь еще какие-либо способы создания заголовков страниц в рельсах?
Ответы
Ответ 1
Я не согласен с другими ответами, я считаю, что заголовок не должен быть установлен за действие, а скорее в самом представлении. Сохраняйте логику представления в представлении и логику контроллера в контроллере.
Внутри application_helper.rb
добавить:
def title(page_title)
content_for(:title) { page_title }
end
Затем, чтобы вставить его в свой <title>
:
<title><%= content_for?(:title) ? content_for(:title) : "Default Title" %></title>
Итак, когда вы находитесь в своих представлениях, у вас есть доступ ко всем переменным экземпляра, установленным с контроллера, и вы можете установить его там. Он также препятствует помехам из контроллера.
<%- title "Reading #{@post.name}" %>
Ответ 2
Мне нравится помещать заголовок по умолчанию в мой макет, который можно переопределить из действия, установив @title
:
<title><%= @title || "Default Title Here" %></title>
Затем вы можете создать заголовок в своем действии:
def show
@post = Post.find_by_id params[:id]
@title = "tybro blog: #{@post.title}"
end
Ответ 3
Я бы сделал это:
# Application Controller
before_filter :set_page_title
private
def set_page_title
@page_title = "Default Title"
end
перезаписать его в других контроллерах
# Users Controller
before_filter :set_page_title
def new # in Users controller
...
@page_title = "Sign up"
...
end
private
def set_page_title
@page_title = "Users"
end
На ваш взгляд:
<title><%= h @page_title %></title>
Ответ 4
Посмотрите на Райана Бейтса (ryanb from railscasts.com) отличный макет. У него есть метод, который делает то, что вы ищете. Он похож на способ Гаррета, только он перемещает значения по умолчанию в помощнике. Просмотрите helper.rb файл и как он текст ссылки использует его.
Вы можете установить как драгоценный камень (и использовать другие приятные функции) или просто использовать его способ сделать это. Вам нужно только передать значение заголовка в title
в каждом представлении (или позволить ему упасть до значения по умолчанию), и там вы идете. Я с Гарреттом ставил эти вещи в точку зрения.
Ответ 5
Шаблон макета
В вашем макете (например, application.html.erb
) добавьте:
<title><%= content_for(:page_title) || "Fallback title" %></title>
Шаблон страницы
В шаблоне страницы вы хотите указать заголовок из:
<%- content_for(:page_title, "Specific page title") %>