Rails 3:yield/content_for 有一些默认值吗?
有什么方法可以检测 #content_for
是否实际应用于 Rails 中的 yield
范围?
一个经典的例子是这样的:
<title><%= yield :page_title %></title>
如果模板没有设置,
<% content_for :page_title, "Something here" %>
有没有办法让布局在那里放置其他东西?
我尝试在布局本身中使用 #content_for
定义它,但这只会导致文本加倍。我也尝试过:
<%= (yield :page_title) or default_page_title %>
其中 #default_page_title
是视图助手。
这使得该块完全空了。
Is there any way to detect if #content_for
was actually applied to a yield
scope in Rails?
A classic example being something like:
<title><%= yield :page_title %></title>
If a template doesn't set that with
<% content_for :page_title, "Something here" %>
Is there a way to have the layout put something else there instead?
I tried defining it with #content_for
in the layout itself, but this just causes the text to be doubled-up. I also tried:
<%= (yield :page_title) or default_page_title %>
Where #default_page_title
is a view helper.
This just left the block completely empty.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您可以使用
content_for?
检查是否存在具有特定名称的内容:或者
然后在您的视图中您可以指定内容,例如
You can use
content_for?
to check if there is content with a specific name:or
Then in your views you can specify the content like
从 Rails 3 开始,如果请求的键没有内容,
yield()
返回空字符串,因此您可以执行以下操作:在应用程序帮助程序中,如果您定义:
那么您可以执行某些操作像这样:
在您的视图中,您可以自定义:
As of Rails 3,
yield()
returns empty string if there was no content for the requested key, so you can do something like this:In your application helper, if you define:
Then you can do something like this:
And in your views you can customize with:
这里有关于 Rails 3 的更好答案:
Yield and default case ||不输出默认情况
<%= Yield(:title).presence || '我的默认标题' %>
Better answer for rails 3 here:
Yield and default case || do not output default case
<%= yield(:title).presence || 'My Default Title' %>
我刚刚发布了一个新的 gem,dry_views,它提供了增强的 content_for 方法。
与接受的答案相比,它的好处是它允许您从视图中删除所有逻辑(if/else)。
有关详细示例,请参阅自述文件:
- no_content_for :key
= content_for_with_default :key
= content_for :key
I have just released a new gem, dry_views, which provides enhanced content_for methods.
The benefit over the accepted answer is it allows you to remove all logic (if/else) from your views.
See the readme for extensive examples:
- no_content_for :key
= content_for_with_default :key
= content_for :key