#ruby-on-rails #haml
#ruby-on-rails #haml
Вопрос:
Чтобы протестировать что-либо на наличие границ CSS во вложенных разделах, необходимо сгенерировать 50 разделов. Другими словами, сгенерировать
<div>
<div>
<div>
... total 50 of them nested
</div>
</div>
</div>
потому что
- 50.times do
%div
не подойдет, так как все они будут параллельными, а не вложенными.
Комментарии:
1. используйте рекурсию в помощнике с content_tag
Ответ №1:
Упрощенно, но, похоже, работает.
- 50.times do
<div>
- 50.times do
</div>
v2 — Все еще упрощенный, но предоставляет больше возможностей.
- 50.times do |i|
!= "<div style='border-style:#{cycle('dotted','dashed')}'>".rjust(i 35)
= i
- 50.downto(1) do |i|
!= "</div>".rjust(i 35)
Комментарии:
1. Дональд, я потратил 30 минут (в качестве упражнения), пытаясь выяснить, как сделать отступ <div> в HAML, и только что сдался, когда увидел вашу версию «v2». Я даже не знал о
!=
разметке до этого вечера. Спасибо за урок! P.S. изменение последней строки на!= "</div>".rjust(i 7)
делает ее идеальной.2. @Dave, я тоже делал это для the challenge и тоже не знал о
!=
… почти сдался, пока не нашел этот чит-лист . Это было весело!3. хороший ответ. Я не знал, что вы можете поместить разметку непосредственно как «содержимое»… это интересно
Ответ №2:
Вы можете попробовать это:
module ApplicationHelper
def recursive_divs(number)
if number > 0
number -= 1
content_tag :div do
recursive_divs(number)
end
end
end
end
И использовать его в своем представлении:
= recursive_divs(50)
надеюсь, это поможет
Ответ №3:
Вы близки. Все, что вам нужно сделать, это добавить 2 пробела для каждой итерации цикла.
- 50.times do |i|
="#{' ' * (i*2)}"%div
' ' * (i*2)
Часть использует тот факт, что строки можно умножать.
Комментарии:
1. Спасибо… Знал, что это возможно, но не мог вспомнить, как умножать строки. Поскольку интервал был вторичным по отношению к вложенности, я не тратил много времени на изучение этого. Спасибо за ваш ответ.
2. @DonaldSowell да, главное помнить, что строка должна быть ПЕРВОЙ, поскольку это вызов метода для string. Если вы поставите первым число, а вторым строку, это не сработает. Но также, поскольку это HAML, пробел ЯВЛЯЕТСЯ вложенностью.
3. вы уверены, что
="#{' ' * (i*2)}"%div
работает? Я попробовал это, и это не сработало. Это выдаст ошибку какundefined local variable or method 'div' for #<#<Class:0x00000104842e48>:0x000001048410e8>
4. извините, я просто тестировал использование irb, чтобы посмотреть, выведет ли он правильное число пробелов. Я не учел тот факт, что его необходимо вывести в haml ПЕРЕД визуализацией.