d11*_*wtq 59 ruby yield ruby-on-rails
有没有办法检测是否#content_for实际应用于yieldRails中的作用域?
一个典型的例子是:
<title><%= yield :page_title %></title>
Run Code Online (Sandbox Code Playgroud)
如果模板没有设置
<% content_for :page_title, "Something here" %>
Run Code Online (Sandbox Code Playgroud)
有没有办法让布局把其他东西放在那里?
我尝试#content_for在布局本身中定义它,但这只会导致文本加倍.我也尝试过:
<%= (yield :page_title) or default_page_title %>
Run Code Online (Sandbox Code Playgroud)
#default_page_title视图帮助器在哪里.
这只是让街区完全空了.
Dyl*_*kow 120
您可以content_for?用来检查是否有具有特定名称的内容:
<% if content_for?(:page_title) %>
<%= yield(:page_title) %>
<% else %>
<%= default_page_title %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
要么
<%= content_for?(:page_title) ? yield(:page_title) : default_page_title %>
Run Code Online (Sandbox Code Playgroud)
然后在您的视图中,您可以指定内容
<% content_for :page_title do %>
Awesome page
<% end %>
Run Code Online (Sandbox Code Playgroud)
Jos*_*ady 13
从Rails 3开始,yield()如果没有所请求密钥的内容,则返回空字符串,因此您可以执行以下操作:
<title><%= yield(:page_title).presence || 'Default Page Title' %></title>
Run Code Online (Sandbox Code Playgroud)
在您的应用程序助手中,如果您定义:
def page_title(title = nil)
title ? content_for(:page_title) { title } : content_for(:page_title).presence
end
Run Code Online (Sandbox Code Playgroud)
然后你可以做这样的事情:
<title><%= page_title or 'Default Page Title' %></title>
Run Code Online (Sandbox Code Playgroud)
在您的视图中,您可以自定义:
<% page_title 'My Page Title' %>
Run Code Online (Sandbox Code Playgroud)
Rails 3 的更好答案在这里:
<%= 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
| 归档时间: |
|
| 查看次数: |
15376 次 |
| 最近记录: |