Nano Hash - криптовалюты, майнинг, программирование

Рендеринг случайных упорядоченных данных Contenful в Middleman

Переполнение стека

У меня проблема с нубом, пытающимся понять, как распечатать некоторые данные YML в «структурированном случайном порядке». Под этим я подразумеваю, что использую Contenful CMS для заказа контента в справочнике (https://www.contentful.com/blog/2015/09/10/creating-a-digital-lookbook/) вид моды.

Drag and drop interface Я могу перетаскивать блоки отсюда, что изменит порядок 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 %>

Ответы:


1

Проблема в том, что ключ в файле YAML является символом, а не строкой, замените его на project[:caseModules] или project.caseModules, любой из двух будет работать так, как ожидалось.

08.03.2017
  • Привет, Дэвид, спасибо за внимание к моей проблеме. Это возвращает хэш, содержащий следующую информацию: <middleman::util::enhancedhash description="Test image description" title="Test image title" url="//images.contentful.com/d65nu5c5ibm8/3l2tizTPRSACEIUK0OugUi/65a718dfa621cb6d1d384251ef83a787/account.png"> Как мне получить доступ к URL-адресу и загрузить изображение? 08.03.2017
  • image.caseImage['url'] Дает мне неопределенный метод `[]' для nil:NilClass 08.03.2017
  • То же, что и в предыдущем ответе, либо caseImage[:url], либо caseImage.url. Но похоже, что caseImage равно nil для одной или нескольких ваших записей. Если это так, вам следует проверить значения nil или использовать Hash#fetch, что позволяет указать значение по умолчанию, если ключ не найден. 08.03.2017
  • Я думаю, что мы кое-что получили. Насколько я понимаю, ошибка возникает из-за того, что не все блоки имеют изображение. Можете ли вы указать мне, как я мог бы использовать что-то вроде Hash#fetch в этом случае? Благодарю вас! 08.03.2017
  • caseImage.fetch(:url, "/images/placeholder.png") должно работать (конечно, у вас должно быть изображение-заполнитель или что-то подобное). Или вы можете заменить это чем-то другим, что вам нужно. Другая возможность - это проверка nil и ничего не рендерится, например if caseImage.url.nil? #... 10.03.2017
  • Привет, Дэвид, еще раз спасибо за регистрацию! Мне удалось решить проблему с помощью has_key? Проверьте редактирование моего вопроса :) 10.03.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..