【问题标题】:Ruby / Slim concatenationRuby / Slim 连接
【发布时间】:2016-11-28 16:37:59
【问题描述】:

我有一个循环检查每个值的索引以构建面包屑,该数据被传递到渲染中,使用每个 slug 作为数组中的单独哈希。目前我得到很多“+”不是方法错误,但我不知道所说的线是如何看起来很苗条的。该行的目的是循环遍历面包屑数组,将面包屑的 slug 重复添加到前一个数组中,并在前面加上一个斜杠以创建一个可用的 url。有谁知道正确的显示方式吗?

代码:

.c-fg
  ol.crumb
    - properties[:breadcrumbs].each_with_index do |breadcrumb, index|
      - url += "/" + breadcrumb[:slug]
      li
        a[href="#{url}" title="#"]
          = breadcrumb[:place]

错误信息:

undefined method `+' for nil:NilClass

【问题讨论】:

  • url初始化为一个空字符串。现在,urlnil,你不能在 nil 对象上调用 +=
  • 假设您正在使用 Rails 是否安全?如果是这样,Slim 基本上是为了对 Rails 快捷方式友好。如果是这种情况,请使用 link_to。它会更具可读性。例如:` = link_to "How It Works", how_it_works_path, title: 'whatever' class: 'whatever'`

标签: ruby slim-lang


【解决方案1】:
.c-fg
  ol.crumb
    - properties[:breadcrumbs].each_with_index do |breadcrumb, index|
      - (url ||= '') << "/" << breadcrumb[:slug]
      li
        a[href="#{url}" title="#"]
          = breadcrumb[:place]

使用String#&lt;&lt; 就地更新字符串总是比使用String#+ 生成大量临时中间字符串对象要好。

【讨论】:

  • 这工作正常,我猜这个问题就像 Arun 上面所说的那样,该 url 设置为 nil,我无法调用 += 。感谢您的帮助!
  • 这有 url ||= '' 在追加之前默认为空字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-26
  • 1970-01-01
相关资源
最近更新 更多