0

Railscastsに従ってカスタム ページ タイトルを更新していますが、それが機能しなくなっていることに気付きました。そのため、コメントに基づいて次のようにコードを更新しました。タイトルを設定しないと「My Services -」と表示されますが、デフォルトのタイトル値セットが含まれているはずです。洞察をお願いします。

application.html.erb

<!DOCTYPE html>
<html>
<%= render 'layouts/head' %>
<!-- <body> included in yield -->
  <%= yield %>
<!-- </body> -->
</html>

_head.html.erb

<head>
  <title>My services - <%= yield(:title) %> </title>
</head>

home.html.erb[意図的にデフォルト値を表示するタイトルを設定していません]

<body></body>

application_helper.rb

  def title(page_title, default="Testing")
    content_for(:title) { page_title || default }
  end

ではapplication_helper.rb、次の解決策も試しました。

  def title(page_title)
    content_for(:title) { page_title || default }
  end

  def yield_for(section, default = "Testing")
    content_for?(section) ? yield(section) : default
  end

洞察をお願いします。

4

1 に答える 1

1

単純化する必要があると思います:

<title>My services - <%= page_title %> </title>

application_helper.rb

def page_title
  if content_for?(:title)
    content_for(:title)
  else
    "Testing"
  end
end

さて、あなたは実際に「テスト」を望んでいるとは思いません...本当に、HTMLページのタイトルの最後にある「-」を見たくないだけだと思います。それでは、次のことをお勧めします。

<title><%= html_title %></title>

def html_title
  site_name = "My services"
  page_title = content_for(:title) if content_for?(:title)
  [site_name,page_title].join(" - ")
end

次のいずれかが表示されます。

<title>My services</title>

または、次のようにタイトルを設定した場合:

<%= content_for(:title) { "SuperHero" } %>

わかるでしょ:

<title>My services - SuperHero</title>

#content_for? と定義されている:

#content_for? simply checks whether any content has been captured yet using #content_for Useful to render parts of your layout differently based on what is in your views.
于 2012-09-03T22:28:28.297 に答える