Почему я должен поставить условие дважды? - PullRequest
0 голосов
/ 12 сентября 2018

У меня действительно нет проблем, но я не понимаю решения.

В представлении проекта (показать) я проверяю, подключен ли просмотрщик.Если нет, я отображаю баннер в определенной позиции в зависимости от количества предложений.

Представление предложений (отображается в виде проекта):

- @offers.each_with_index do |offer, index|

   - if !user_signed_in? && (@project.published? || @project.pending_attribution?)
      - if cta_banner_position(@offers, index)
         = render 'projects/cta_banner_guest_presta.html.haml'

cta_banner_position helper:

def cta_banner_position(offer, index)
   index == 2 || (offer.size == 2 && index == 1) || (offer.size == 1 && index == 0)
end

Визуализированный баннер:

.row
   .col-md-12
      .project-cta.p-5.mb-2.text-center
         %h5
            %strong
               blabla
          %p.text-muted blabla
          %p.m-0
             = link_to "Send a quote", "", class: "btn btn-primary px-3", data: { toggle: 'modal', target: '#modal-sign' }, onclick: "ga('send', 'event', 'button', 'Clic', 'Projects signup inoffers');", tabindex: -1

Я использую each_with_index для получения позиции и установки баннера, это работаетно, если я подключен, я вижу баннер (несмотря на условие! user_signed_in) ТОЛЬКО если нет предложения.

Я не понимаю, почему у меня отображается баннер, когда я подключен.Чтобы решить эту проблему, я также должен добавить « - if! User_signed_in? » вверху файла баннера.Когда я это делаю, баннер перестает отображаться, если я вошел в систему.

Может ли кто-нибудь объяснить мне, почему он игнорирует первое условие, и особенно почему, только когда нет предложения?

1 Ответ

0 голосов
/ 12 сентября 2018

Ваш помощник ничего не делает.Вы просто возвращаете ноль, если это условие выполнено (или если оно не выполнено).Вместо этого просто верните эту длинную логическую логику и получите - if cta_banner_position(@offers, index).Это исправит проблему с отступами, о которой упоминал @ fl00r, так как ваш cta-баннер не мог быть вложен ранее.

Я не думаю, что помощник даже вызывался раньше, обычно требуется - перед Ruby, чтобы он выполнялся в haml

...