заголовки страниц рельсов - PullRequest
26 голосов
/ 01 октября 2010

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

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

def page_title
    "Default Title Here"
end

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

def page_title
    "Awesome Posts"
end

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

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

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

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

Ответы [ 5 ]

85 голосов
/ 01 октября 2010

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

Внутри вашего 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}" %>
7 голосов
/ 01 октября 2010

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

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

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

def show
  @post = Post.find_by_id params[:id]
  @title = "tybro's blog: #{@post.title}"
end
2 голосов
/ 01 октября 2010

Я бы сделал это:

# 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>
1 голос
/ 01 июня 2017

Шаблон макета

В вашем макете (например, application.html.erb) добавьте:

<title><%= content_for(:page_title) || "Fallback title" %></title>

Шаблон страницы

В шаблоне страницы, который вы хотите указатьназвание от:

<%- content_for(:page_title, "Specific page title") %>
1 голос
/ 01 октября 2010

Взгляните на Райана Бейтса (Райанб с railscasts.com) отличный макет .У него есть метод, который делает то, что вы ищете.Это похоже на способ Гарретта, только он перемещает значения по умолчанию в помощнике тоже.Проверьте файл helper.rb и как он текст ссылки использует его.

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

...