ruby - 未定义方法 `[]' 为 nil :NilClass when trying to display metadata in nanoc

标签 ruby erb nanoc

( ruby 菜鸟) 我正在使用 nanoc 生成站点。这是我的带有元数据的示例页面:

--- 
title: abc
parameters:
    abc: def
    ghi: ijk
---

test

我知道我可以在上一级设置参数,但我想在布局文件中访问它们:

<%= @item[:parameters][:abc] %>

但是我得到了以下错误:

undefined method `[]' for nil:NilClass

参数被传递给布局,因为当我这样做时:

<%= YAML::dump(@item[:parameters]) %>

我能看到他们。作为一个 Ruby 新手,我认为我的问题有一个简单的解决方案。此外,如果您可以发布一个遍历 :parameters hash 的片段,我将不胜感激。

最佳答案

您的站点上可能有多个页面。因此 parameters 并不存在于每个页面 nanoc 进程的布局中。对于某些页面,该元素将为 nil,因此会出现错误。

也许您需要重新考虑如何使用这些参数,或者您需要在布局中使用条件来查找 parameters 并仅在它们存在时使用它们:

<% if @item[:parameters] %>
 <%= @item[:parameters][:abc] %>
<% end %>

关于ruby - 未定义方法 `[]' 为 nil :NilClass when trying to display metadata in nanoc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14343785/

相关文章:

ruby - 在 Sequel 中热切加载多对多关联

ruby-on-rails - 带if语句的Users#show中的语法错误

ruby-on-rails - 如何在 ERB 中转义 ERB 标签

ruby-on-rails - 为什么 erb 的 <%= %> 中不允许使用#comment 语法?

ruby - 使用 unicorn 测试的 nanoc 站点

ruby-on-rails - git post-receive hook 没有运行 bundle install

ruby-on-rails - 笛卡尔积 ruby

ruby-on-rails - Rails 5.1.7:Sprockets::Rails::Helper::AssetNotFound

javascript - 如何将自己的 javascript 文件添加到 nanoc?

ruby - 如何阻止 nanoc 跳过内容页面