0

アプリで次のことをしたい: 自分でタイトルを設定しない場合 - タイトルを設定した場合、タイトルは「アプリ」を表示します -> <%= タイトル「ようこそ」%> タイトルは「ようこそ」を表示します

私は:index.html.erb

<%= title "Welcome controller" %>

applicaton.html.erb:

<!DOCTYPE html>
<html>
<head>
<title><%= yield(:title) %></title>

アプリケーション ヘルパー:

module ApplicationHelper
def title(page_title)
  content_for(:title) { page_title  }
end  
end

私はそのようなものが欲しい:

 <title><%= yield(:title) || "App" %></title>

しかし、それはうまくいきません - なぜですか?(表示 -> htp://local....)

4

2 に答える 2

1

yield(:title)false または null を返しません。あなたが持っているのと同じように動作させたい場合はcontent_for?、何も定義されていない場合に false を返すものを使用できます。

<%= content_for?(:title) ? yield(:title) : 'App' %>

しかし、titleセッターが単に へのプロキシである場合content_forは、ゲッターのヘルパーも作成してみませんか? titleタイトルの取得と設定の両方に同じメソッドが使用される、このようなパターンをよく見てきました。これは非常に単純な例ですが、アイデアは次のとおりです。

# your helper
def title(val)
  @_title = val || @_title || "App"      
end

# some template
<% title "Welcome" %>

# some layout
<title><%= title %></title>
于 2012-08-19T20:29:22.027 に答える
0

ヘルパーを変更できます:

content_for(:title) { page_title || "App" }

ただし、コントローラーにタイトル変数を設定せず、それを使用するだけの理由が知りたいです。

于 2012-08-19T20:20:12.183 に答える