Переполнение стека
У меня проблема с нубом, пытающимся понять, как распечатать некоторые данные YML в «структурированном случайном порядке». Под этим я подразумеваю, что использую Contenful CMS для заказа контента в справочнике (https://www.contentful.com/blog/2015/09/10/creating-a-digital-lookbook/) вид моды.
Я могу перетаскивать блоки отсюда, что изменит порядок YML
Редакторы содержимого могут иметь возможность перетаскивать порядок отображения модулей. Таким образом, порядок данных YML всегда будет другим.
Быстрый макет того, чего я хочу достичь:
Вот как сейчас выглядят данные
:caseModules:
- :id: 2sY3tXCqSIcIM2IUgqCCgG
:quoteBody: Either you run the day or you day runs you
:quoteOriginName: Ghandi
:quoteDate: !ruby/object:DateTime 2017-03-23 00:00:00.000000000 Z
- :id: 2qpSXdyiqg8iQucGoQweio
:caseImage:
:title: Test image title
:description: Test image description
:url: "//images.contentful.com/d65nu5c5ibm8/3l2tizTPRSACEIUK0OugUi/65a718dfa621cb6d1d384251ef83a787/account.png"
:caseImageName: Test image title
:caseImageCaption: This test image is a nice example of how we want to showcase
images on the page
- :id: 3HaLvYSEs86ACoqMYE0QSk
:header: Header
:body: "There are previous versions because you haven't made changes to this entry
yet. As soon as you publish changes, you'll be able to compare different versions.\n\n"
- :id: 6HASpa0o3SkyMK4gYgIq8W
:quoteBody: This is another quote
:quoteOriginName: Sebastian Graz
:quoteDate: !ruby/object:DateTime 2019-01-19 00:00:00.000000000 Z
- :id: 3D6Gx2qphK6qAI2qyYGcwK
:caseImage:
:title: king-fisher
:description: With King Fisher we managed to create an unique experience using
Spindrift Site Builder
:url: "//images.contentful.com/d65nu5c5ibm8/5kCjQiyCv6m00m0m46UWi4/ce4ab4cdc8ade1fd63f3e564def42e45/king-fisher.png"
:caseImageName: King Fisher case image name
:caseImageCaption: King fisher image caption
Я использую .erb для печати данных следующим образом:
<% data.site.container.each do | _, project| %>
<%= project['caseModules']%>
<% end %>
Что дает мне это на переднем конце.
[# quoteOriginName="Ghandi">, # caseImageCaption="This test image is a nice example of how we want to showcase images on the page" caseImageName="Test image title" id="2qpSXdyiqg8iQucGoQweio">, #, # quoteOriginName="Sebastian Graz">, # caseImageCaption="King fisher image caption" caseImageName="King Fisher case image name" id="3D6Gx2qphK6qAI2qyYGcwK">]
Я надеялся, что смогу сделать что-то вроде:
<% data.site.container.each do | _, project| %>
<% project['caseModules'].each do | image | %>
<%= image['caseImage']['url']%>
<% end %>
<% end %>
Но получаю ошибку: undefined method `[]' for nil:NilClass
Поэтому мне интересно, может ли кто-нибудь подсказать мне, что я делаю неправильно. Должен ли я использовать случай переключения для рендеринга другого блока? Я делаю что-то не так в синтаксисе <%= image['caseImage']['url']%>
, что он не работает?
Любая помощь приветствуется
РЕДАКТИРОВАТЬ:
В итоге я использовал has_key?
, и это сработало.
<% data.site.container.each do | id, container| %>
<% container.caseModules.each do | caseModules | %>
<% if caseModules.has_key?("caseImage") && caseModules["caseImage"]%>
<img src="<%= caseModules.caseImage['url'] %>" alt="" />
<% end %>
<% if caseModules.has_key?("quoteBody") && caseModules["quoteBody"]%>
<%= caseModules.quoteBody %>
<% end %>
<% if caseModules.has_key?("body") && caseModules["body"]%>
<%= caseModules.body %>
<% end %>
<% end %>
<% end %>
<middleman::util::enhancedhash description="Test image description" title="Test image title" url="//images.contentful.com/d65nu5c5ibm8/3l2tizTPRSACEIUK0OugUi/65a718dfa621cb6d1d384251ef83a787/account.png">
Как мне получить доступ к URL-адресу и загрузить изображение? 08.03.2017image.caseImage['url']
Дает мне неопределенный метод `[]' для nil:NilClass 08.03.2017caseImage[:url]
, либоcaseImage.url
. Но похоже, чтоcaseImage
равноnil
для одной или нескольких ваших записей. Если это так, вам следует проверить значенияnil
или использоватьHash#fetch
, что позволяет указать значение по умолчанию, если ключ не найден. 08.03.2017caseImage.fetch(:url, "/images/placeholder.png")
должно работать (конечно, у вас должно быть изображение-заполнитель или что-то подобное). Или вы можете заменить это чем-то другим, что вам нужно. Другая возможность - это проверкаnil
и ничего не рендерится, напримерif caseImage.url.nil? #...
10.03.2017has_key?
Проверьте редактирование моего вопроса :) 10.03.2017