为什么没有值的变量返回 true 且为空?当在视图中使用时)?

2024-04-28

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(使用前将#替换为@)

为什么没有值的变量返回 true 且为空?当在视图中使用时)? 的相关文章

  • 从 url 导入 CSV Errno::ENAMETOOLONG: 文件名太长

    我正在尝试从 url 导入 CSV 文件 但我得到了Errno ENAMETOOLONG file name too long 我按如下方式处理该文件 require open uri url http de65 grepolis com
  • 如何在 Rails 控制器中调用通道方法?

    我有一个订阅用户的 ActionCable 方法 如果启动新的 convo 我也希望用户订阅新频道 我无法找出在控制器中调用通道方法的正确语法 更新 问题是消息在发送时附加到聊天框 但是当发送第一条消息时 Websocket 连接尚未建立
  • 多态控制器和调用对象

    我的地址具有多态关系 可以由成员或依赖者拥有 一切看起来都很棒 直到我意识到除非我遗漏了一些东西 否则我不知道创建它的对象是什么类型 有没有办法告诉路由文件包含对象的类型 Models class Member lt ActiveRecor
  • Ruby 中的并行赋值运算符

    我正在查看 Ruby 编程 书中的一个示例 def fib up to max i1 i2 1 1 parallel assignment i1 1 and i2 1 while i1 lt max yield i1 i1 i2 i2 i1
  • 捆绑安装无法从 https://rubygems.org/ 获取规格

    我正在尝试遵循 Hartl Rails 教程 但在使用捆绑器 gem 时遇到了问题 使用命令 bundle install 或 bundle update 时 我得到以下输出 从中获取源索引https rubygems org https
  • 在私有控制器方法中返回redirect_to

    前言 我正在使用设备进行身份验证 我试图阻止未经授权的用户查看 编辑或更新其他用户的信息 我最关心的是用户将 DOM 中的表单修改为另一个用户的 ID 填写表单 然后单击更新 我已经专门阅读过 像下面这样的东西应该有效 但事实并非如此 SO
  • 使用 Ajax 在输入时提交 Textarea,然后渲染部分内容而不刷新整个页面

    目前我正在尝试通过 JS 和 Ajax 在没有提交按钮的情况下发表评论 并且它有效 问题是当帖子提交时 页面重新加载到 post id comment页面 我希望它呈现部分内容 而不是刷新整个页面或将我带到不同的页面 我对 JS 不熟悉 任
  • 将 Rails 变量传递给液体可以在控制台中工作,但不在视图中

    我想将哈希传递给渲染方法 当我这样做时 在我的控制台中一切正常 object Object find params id hash object object to liquid template Liquid Template parse
  • Capistrano 和 XSendFile 配置

    我正在尝试使用 Apache 2 2 Passenger 4 0 59 和 XSendFile 0 12 配置 Rails 生产服务器 应用程序通过 Capistrano 部署 部署的应用程序生成 可能很大 PDF Rails root t
  • 如何计算带有偏移量的异或?

    我想用不同的偏移量进行异或计算以在计算中列出 例子 key 0 1 0 text 0 1 0 1 0 1 0 1 1 1 异或计算 key 0 text 0 key 1 text 1 key 2 text 2 key 0 text 3 ke
  • yard 0.7.3 无法在 Markdown 和 Textile 中构建我的自述文件

    我决定将我的项目中的 README 文件转换为 Markdown 并一直使用yard 验证文档是否正确呈现 所以我安装了 rdiscount 将 README 更改为 README md 并尝试 yard doc README md 这给了
  • 如何从 Ruby 程序发送邮件?

    我想从 Ruby 应用程序发送电子邮件 核心语言中是否有调用来执行此操作 或者是否有我应该使用的库 最好的方法是什么 如果你不想使用行动邮递员 http wiki rubyonrails org rails pages ActionMail
  • Heroku 部署错误

    在 Windows 环境中 尝试部署到 Heroku 时出现以下错误 C Ruby lib ruby gems 1 8 gems heroku 1 9 13 lib heroku commands base rb 32 in 没有这样的文件
  • 测量两个字符串之间相似性的有效方法是什么? (编辑距离使堆栈太深)

    所以 我从这个开始 http en wikibooks org wiki Algorithm Implementation Strings Levenshtein distance Ruby http en wikibooks org wi
  • 仅删除多对多关系

    我有一个 has and belongs to many friends join table gt friends peoples 要添加朋友 我会这样做 people followers lt lt friend这会创建关系和新的个人资
  • 多重要求和允许强参数rails 4

    在下面的情况下 我尝试使用强参数 我想要求email address password并允许remember me fields 但像下面这样使用它只允许最后一行在方法示例中 在下面的情况下 它只需要params permit rememb
  • 如何从 ruby​​ 中的字符串中删除所有非数字?

    用户输入数字的形式如下 1 800 432 4567 800 432 4567 800 432 4566 800 432 4567 1 800 432 4567 800 432 4567 我希望所有这些都变成没有特殊字符的剥离版本 例如18
  • “rmagick”gem 安装问题

    我在尝试在 centos 上安装 rmagick gem 时遇到问题 以下是我得到的输出 谁能帮我识别一下我缺少什么包裹 我已经安装了所有提到的另一个堆栈溢出线程 RMagick安装错误 https stackoverflow com qu
  • 浏览器关闭时 Omniauth 会话过期

    在我的 Rails 3 应用程序中 我使用 Omniauth 进行用户身份验证部分 fb twitter 实际上我遵循这个 https github com RailsApps rails3 mongoid omniauth https g
  • Rails - 渲染:目标锚标记的操作?

    我希望像这样使用渲染 render action gt page form 我也尝试过这个 render template gt site page form 那也没用 这个特定页面上的表单位于最底部 如果提交时发生任何错误 我不希望用户被

随机推荐