M Hartl的Ruby on Rails教程第5章主页上的自定义标题

时间:2012-12-05 20:00:02

标签: ruby-on-rails ruby

在Michael Hartl的RoR教程中:第5章末尾的练习涉及简化RSpec测试。

5.37(http://ruby.railstutorial.org/chapters/filling-in-the-layout#sec-layout_exercises)为主页定义了几个测试。 在文件spec / helpers / application_helper_spec.rb中:

require 'spec_helper'

describe ApplicationHelper do

  describe "full_title" do
  .
  .
  .
  .
    it "should not include a bar for the home page" do
      full_title("").should_not =~ /\|/
    end
  end
end

要通过此测试,我需要显示主页标题: “Ruby on Rails教程示例应用程序” 而不是“Ruby on Rails Tutorial Sample App | Home”

但是,本教程并未指导我如何编写更改代码。

这是我尝试过的:

在app / views / static_pages / home.html.erb中:

  1. 卸下:

    <% provide(:title, 'Home') %>

  2. 在app / views / layouts / application.html.erb中   将代码编辑为:

    <title>
     <% if :title
      full_title = "Ruby on Rails Tutorial Sample App | " && yield(:title)
     else
      full_title = "Ruby on Rails Tutorial Sample App"
     end %>
     <%= print full_title %>
    </title>
    

    我的noob大脑的其他变化可以集合。 这就是我想要完成的事情:

    如果页面没有提供标题,请返回“Ruby on Rails Tutorial Sample App”

    如果提供了标题,请返回“Ruby on Rails Tutorial Sample App | #PageTitle”

    任何建议都表示赞赏。

1 个答案:

答案 0 :(得分:5)

这个怎么样?

module ApplicationHelper

  # Returns the full title on a per-page basis.
  def full_title(page_title)
    base_title = "Ruby on Rails Tutorial Sample App"
    if page_title.empty?
      base_title
    else
      "#{base_title} | #{page_title}"
    end
  end
end

http://ruby.railstutorial.org/chapters/rails-flavored-ruby#code-title_helper

只需在视图中调用方法即可。 所以应该是这样的 <title><%= full_title(yield(:title)) %></title> 正如他所说。