заголовки страниц рельсов

Мне не нравится, как rails делает заголовки страниц по умолчанию (просто использует имя контроллера), поэтому я работаю над новым способом сделать это так:

контроллер приложения:

def page_title
    "Default Title Here"
end

Контроллер сообщений:

def page_title
    "Awesome Posts"
end

макет приложения:

<title><%=controller.page_title%></title>

Это работает хорошо, потому что если у меня нет метода page_title в каком-либо контроллере, который я сейчас использую, он возвращается к значению по умолчанию в контроллере приложения. Но что, если в моем контроллере пользователей я хочу, чтобы он возвратил «Registration» для «нового» действия, но отступил для любого другого действия? Есть способ сделать это?

Во-вторых, есть ли у кого-нибудь еще способы делать заголовки страниц в рельсах?

Ответы на вопрос(2)

который можно переопределить с помощью действия@title:

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

Затем вы можете создать заголовок в вашем действии:

def show
  @post = Post.find_by_id params[:id]
  @title = "tybro's blog: #{@post.title}"
end
 tybro010301 окт. 2010 г., 19:20
Мне тоже нравится этот ответ.
Решение Вопроса

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

Внутри вашего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}" %>
 Richlewis06 июн. 2014 г., 12:12
@Garrett очень нравится это решение, спасибо
 AndyJW03 окт. 2013 г., 23:42
Я только что попробовал, и это не работает. знак равно
 olleh24 апр. 2015 г., 12:17
супер сладкое решение!
 Matijs van Zuijlen17 июл. 2013 г., 12:02
Не могли бы вы упростить троичный оператор, чтобы просто использовать||, вот так:content_for(:title) || "Default Title"?
 dennismonsewicz03 дек. 2013 г., 02:50
@AndyJW - Чтобы троичный сработал, нужно сделатьcontent_for(:title).presence || "Default Title" - content_for возвращает ноль, если контент не существует
 Raphomet01 окт. 2010 г., 19:24
На самом деле, мне нравится этот ответ лучше, чем мой собственный. Я не знал оcontent_for, Спасибо за публикацию.

Ваш ответ на вопрос