Как создать условие для HTML-селектора с .each Rails - PullRequest
0 голосов
/ 25 сентября 2019

Цикл отображает несколько флажков и меток.После 5 остальные флажки должны отображаться в одном .for-disable классе.

Как это сделать в цикле?

Мой метод .each в haml:

- @interests.each do |interest|
  %li
    = f.check_box(interest.id)
    = f.label(interest.id, interest.name)

Я пытался:

- @interests.each do |interest|
    - if interest.id == 5
      .for-disable
        %li
          = f.check_box(interest.id)
          = f.label(interest.id, interest.name)
    - else
      %li
        = f.check_box(interest.id)
        = f.label(interest.id, interest.name)

Но, как и следовало ожидать, в этом случае в классе «для отключения» отображается только один флажок.

Ответы [ 2 ]

1 голос
/ 25 сентября 2019

Важное примечание: добавление div в качестве дочернего элемента ul означает недопустимый HTML :)

В качестве альтернативы можно добавитьfor-disable класс добавлен к li с после первых пяти interests?

Как насчет этого, используя each_with_index:

- @interests.each_with_index do |interest, index|
  %li{ class: ("for-disable" if index > 4) }
    = f.check_box(interest.id)
    = f.label(interest.id, interest.name)

Или альтернативный синтаксис с использованием помощника tag, если вы предпочитаете:

- @interests.each_with_index do |interest, index|
  = tag.li class: ("for-disable" if index > 4) do
    = f.check_box(interest.id)
    = f.label(interest.id, interest.name)

Индекс начинается с 0, следовательно, проверяется, если > 4.


В качестве альтернативы, если вы хотите, чтобы все interests после первых пяти в отдельной div вы могли бы использовать:

%ul
  - @interests.first(5) do |interest|
    %li
      = f.check_box(interest.id)
      = f.label(interest.id, interest.name)

.for-disable
  %ul
    - @interests.drop(5) do |interest|
      %li
        = f.check_box(interest.id)
        = f.label(interest.id, interest.name)

И красиво, и чисто, и должно предложить что-то, чтобы сделать то, что вы ищете - дайте мне знать, как вы поживаете или если у вас есть какие-либо вопросы:)

0 голосов
/ 25 сентября 2019

Я написал помощник для этого.Вы можете использовать этот помощник:

  1. Добавьте эти вспомогательные методы в interests_helper.rb или в любое другое место.

    def checkboxes(interests, form)
      container = ''
      for_disable_div = '<div class="for-disable">'
      interests.each do |interest|
        if interest.id > 5
          for_disable_div += checkbox_item(interest, form)
        else
          container += checkbox_item(interest, form)
        end
      end
      sanitize "#{container} #{for_disable_div}</div>"
    end
    
    def checkbox_item(interest, form)
      content_tag :li do
        form.check_box(interest.id)
        form.label(interest.id, interest.name)
      end
    end
    
  2. Используйте его в форме

    = checkboxes(interests, f)
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...