Подтвердить что ты не робот

Заголовки рельсов

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

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

def page_title
    "Default Title Here"
end
Контроллер сообщений

:

def page_title
    "Awesome Posts"
end

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

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

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

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

4b9b3361

Ответ 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") %>