0

我想在我的应用程序中执行下一步:如果我不通过我自己设置我的标题 - 标题显示“应用程序”如果我设置标题 -> <%= 标题“欢迎” %> 标题显示“欢迎”

我愿意:index.html.erb

<%= title "Welcome controller" %>

应用程序.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?which 将返回 false 如果没有定义任何内容:

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

但是,如果您的titlesetter 只是 的代理content_for,为什么不也为 getter 做一个助手呢?我经常看到这样的模式,其中使用相同的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 回答