Локальные файлы Rails — передача данных подключенной модели

#ruby-on-rails

#ruby-on-rails

Вопрос:

Структура моей модели довольно надежная. У меня в MarketingDeliverySystem есть множество маркетинговых разделов. В MarketingSections есть множество MarketingVideos.

У меня есть еще один сегмент: GroupDevelopment has_many GroupSections. В GroupSections есть множество групповых видеороликов.

Я пытаюсь использовать partial для передачи переменных, таким образом, высушивая все это.

У меня есть следующее, что я пытаюсь передать частичному:

 = render partial: '/sales_presentations/sales_presentation',
                    locals: { marketing_delivery_system: @marketing_delivery_system,
                              first_video: first_marketing_video(@marketing_delivery_system),
                              sales_presentation: @marketing_delivery_system}
  

Тогда в частичном у меня есть следующее:

 .rounded-box-header.blue-bg #{sales_presentation.title}   
 ul
  - sales_presentation.sections.ordered.each_with_index do |section, index|
   - list_class = 'section show'
   - list_class = 'section hide' if index != 0
     li
      = link_to section.title, '#', class: 'section', data: { id: section.id }
              ul class="#{list_class}" data-section-id="#{section.id}"
                - section.videos.ordered.each do |video|
                  li.video
                    = link_to video.title, '#',
                                           class: 'video video-link',
                                           data: { video: video.youtube_link,
                                                   sales_presentation: sales_presentation.title.parameterize }
      .seven.columns
        .row
          div id="#{sales_presentation.title.parameterize}-container"
            video {
              id="#{sales_presentation.title.parameterize}-video-player"
              class="video-js vjs-default-skin videos"
              height=400
              poster=""
              controls preload='none'
              data-default-url="#{first_video(sales_presentation)amp;.youtube_link}"
  

Ранее у меня были проблемы с sales_presentation.title вверху, пока я не обновил локальные файлы.

Мой вопрос / проблема в том, как мне пройти через локальные файлы для использования для sales_presentation.sections вместо использования @marketing_delivery_system.marketing.sections?

Я думал, что мог бы просто ввести это через locals: sales_presentation.sections: @marketing_delivery_system.marketing_sections, но в итоге я получаю массивную синтаксическую ошибку.

Я также попытался создать частичное представление для этих двух, а затем изменил sales_presentation во всем представлении на mod. Затем изменил mod.sections на mod_section и установил для локальных файлов значение mod_section: @marketing_delivery_system.marketing_section. Затем проблема заключается в том, что мне в конечном итоге нужно просмотреть видео позже на итерации. Итак, тогда возникает та же проблема.

Ответ №1:

Вы неправильно понимаете значение locals в partials.

Говорит, что у нас есть

 <%= render partial: 'image', locals: {size: @image.size, extension: @image.extension} %>
  

Это означает, что в image частичном режиме теперь мы можем использовать локальную переменную size and extension (ключи) как @image.size и @image.extension (значения).

Введите locals: {} все локальные переменные, которые вы хотите.

Таким образом, вы не можете писать в локальных sales_presentation.sections: @marketing_delivery_system.marketing.sections

Но вы можете sales_presentation_sections: @marketing_delivery_system.marketing.section

Также у вас проблема с этим кодом:

 locals: { marketing_delivery_system: @marketing_delivery_system,
          first_video: first_marketing_video(@marketing_delivery_system),
          sales_presentation: @marketing_delivery_system }
  

marketing_delivery_system и sales_presentation будут иметь то же значение.