The empty?
方法对于 nil 类是未定义的,所以当你尝试时nil.empty?
在控制台中它给出:undefined method empty? for nil:NilClass
我在 application_helper.rb 中创建了这个方法:
def full_title(page_title)
base_title = "my app"
if page_title.empty?
base_title
else
"#{base_title} - #{page_title}".html_safe
end
end
在我的应用程序布局中,我在标题标签上调用它,如下所示:
!!!
%html
%head
%title #{full_title(yield(:title))}
...
...
%body
= yield
在我的每一个观点中我都添加了provide(:title, "something")
用于将字符串传递给此辅助方法。
但当我不使用时provide(:title, "something")
看起来像如果page_title.empty?返回真!
我的问题是为什么 page_title.empty?返回真。我认为当我不使用时 page_title 变量为零provide(:title, "something")
,它不会引发任何错误吗?比如未定义的undefined method empty? for nil:NilClass
如果你这样做yield :title
并且未提供任何内容,它将返回一个空字符串,因此可以在您的视图中将其连接起来。
如果我理解正确的话,你的代码就像现在一样工作。pagetitle
is空的,对吗?
有关的:ActionView 中的 Yield 魔法是如何发挥作用的? https://stackoverflow.com/questions/2630621/how-does-the-yield-magic-work-in-actionview
给定的链接解释的是,每次你这样做content_for
or provide
它将构建一个哈希(例如,它如何实际存储并不重要),当你这样做时yield
它将在内容中查找所请求的符号。事实上,这就是您需要知道的全部。但它永远不会测试符号是否为空,而是测试它们是否具有给定符号的内容,如果没有,则返回空字符串。
因此,示例实现类似于
def provide(symbol, args=nil, &block)
@content_for[symbol.to_sym] = args
@content_for[symbol.to_sym] ||= capture(yield)
end
查找看起来像这样
def yield(symbol)
@content_for[symbol].to_s
end
and nil.to_s
只是一个空字符串。
现在rails只是开源的,所以如果你真的想要的话你可以查一下,它会稍微复杂一点,尤其是关于块处理。
现在符号可能很难理解。符号是一个字符串,它有一个唯一的数字。所以每次你写:name
它会有相同的数字(比如 1),并且每次你写:first_name
它将有另一个号码。因此,符号是分配唯一数字的一种非常可读的方式,因此总是用于散列中来存储和查找内容。原来如此never符号本身具有内容,该符号用作在哈希中查找内容的密钥。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)