Более компактный способ был бы с оператором case:
def current_path
request.env['PATH_INFO']
end
def page_headings
case current_path
when about_path then "about"
when members_path then "members"
when sponsors_path then "sponsors"
when events_path then "events"
when membership_path then "join us"
when womens_path then "women's page"
when new_session_path then "log in"
when new_user_path then "register"
else
puts "PAGE TITLE MISSING" if Rails.env.development?
"My App Name"
end
end
Однако в Rails для этого обычно используется шаблон, который рассматривает заголовок как часть слоя представления и использует provide
и yield
от ваших взглядов, подобных этому:
# app/layouts/application.html.erb
<title><%= yield(:title) + ' | ' if content_for?(:title) %>My App</title>
# app/views/about/index.html.erb
<% provide(:title, "About") %>
<h1>About</h1>
# app/views/sponsors/index.html.erb
<% provide(:title, "Sponsored by #{@sponsor.name}") %>
<h1>Sponsored by <%= @sponsor.name %></h1>
Преимущество утверждения case заключается в том, что все в одном месте легко хранить, но недостатком является то, что он далеко от того места, где вы на самом деле определяете, что такое страница.выглядит и может потенциально использовать содержимое из переменных экземпляра в заголовке.