Rails 3 - Ideal way to set title of pages

后端 未结 13 1234
失恋的感觉
失恋的感觉 2020-12-04 06:33

Whats the proper way to set the page title in rails 3. Currently I\'m doing the following:

app/views/layouts/application.html:


  

        
相关标签:
13条回答
  • 2020-12-04 06:57

    I prefer this:

    module ApplicationHelper
      def title(*page_title)
        if Array(page_title).size.zero?
          content_for?(:title) ? content_for(:title) : t(:site_name)
        else
          content_for :title, (Array(page_title) << t(:site_name)).join(' - ')
        end
      end
    end
    

    If title is called without arguments, it returns the current value of title or the default which in this example will be "Example".

    It title is called with arguments, it sets it to the passed value.

    # layouts/application.html.erb
    <title><%= title %></title>
    
    # views/index.html.erb
    <% title("Home") %>
    
    # config/locales/en.yml
    en:
      site_name: "Example"
    
    0 讨论(0)
  • 2020-12-04 07:01

    I thought it will be good:

    <title>
        <% if @title %>
          <%= @title %>
        <% else %>
          Your title
        <% end %>
    </title>
    

    And give a value to @title in your controller, or the title will be Your title

    0 讨论(0)
  • 2020-12-04 07:02

    I found that apeacox's solution didn't work for me (in Rails 3.0.3).

    Instead I did...

    In application_helper.rb:

    def title(page_title, options={})
      content_for(:title, page_title.to_s)
      return content_tag(:h1, page_title, options)
    end
    

    In the layout:

    <title><%= content_for(:title) %></title>
    

    In the view:

    <% title "Page Title Only" %>
    

    OR:

    <%= title "Page Title and Heading Too" %>
    

    Note, this also allows us to check for the presence of a title and set a default title in cases where the view hasn't specified one.

    In the layout we can do something like:

    <title><%= content_for?(:title) ? content_for(:title) : 'This is a default title' %></title>
    
    0 讨论(0)
  • 2020-12-04 07:02

    My answer is more simple:

    locales/any_archive.yml:

    pt-BR:
      delivery_contents:
        title: 'Conteúdos de Entregas'
    
      groups:
        title: 'Grupos'
    

    And inside of application.html.slim:

    title
      = "App Name: #{t("#{controller_name.underscore}.title")}"
    
    0 讨论(0)
  • 2020-12-04 07:03

    I have a somewhat more complicated solution. I want to manage all of my titles in my locale files. I also want to include meaningful titles for show and edit pages such that the name of the resource is included in the page title. Finally, I want to include the application name in every page title e.g. Editing user Gustav - MyApp.

    To accomplish this I create a helper in application_helper.rb which does most of the heavy lifting. This tries to get a name for the given action from the locale file, a name for the assigned resource if there is one and combines these with the app name.

    # Attempt to build the best possible page title.
    # If there is an action specific key, use that (e.g. users.index).
    # If there is a name for the object, use that (in show and edit views).
    # Worst case, just use the app name
    def page_title
      app_name = t :app_name
      action = t("titles.#{controller_name}.#{action_name}", default: '')
      action += " #{object_name}" if object_name.present?
      action += " - " if action.present?
      "#{action} #{app_name}"
    end
    
    # attempt to get a usable name from the assigned resource
    # will only work on pages with singular resources (show, edit etc)
    def object_name
      assigns[controller_name.singularize].name rescue nil
    end
    

    You will need to add action specific texts in your locale files in the following form:

    # en.yml 
    titles:
      users:
        index: 'Users'
        edit: 'Editing'
    

    And if you want to use meaningful resource names in your singular views you may need to add a couple of proxy methods, e.g.

    # User.rb
    def name
      username
    end
    
    0 讨论(0)
  • 2020-12-04 07:05

    You can also check this railscast. I think it will be very useful and give you basic start.

    NOTE: In case you want more dynamic pages with pjax

    0 讨论(0)
提交回复
热议问题