условный haml - если еще вложенность

То, что я хочу, это то, что в «если» и что в «иначе», чтобы включить #main-block.

- if @transparency
  #content-inner{:style => "background: url(../../../images/illustrations/" + @transparency + ") no-repeat 88% 50%"}
- else 
  #content-inner
     #main-block

В настоящее время происходит следующее: если @transparency определено, #main-block не вложено в #content-inner.


person Dr. Frankenstein    schedule 16.11.2009    source источник
comment
выглядит как тот же пост, что и - stackoverflow.com/questions/1451794/haml-if-else-error - хотя они, похоже, не получили ответа, кроме дубликата   -  person Dr. Frankenstein    schedule 16.11.2009


Ответы (1)


Вы можете использовать тернарный оператор для условного применения атрибута стиля:

#content-inner{ :style => @transparency ? "background: url(../../../images/illustrations/" + @transparency + ") no-repeat 88% 50%" : '' }
  #main-block

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

person tadman    schedule 16.11.2009
comment
Только что увидел ваш ответ и хотел добавить, что если бы вам пришлось оценивать Ruby внутри этого условного выражения, вы могли бы сделать то, что сделал я: .request{ :class => (request.user_id == current_user.id) ? "highlight" : nil }. В случае того, как я должен отображать это (длинная история), я не мог создать переменную экземпляра, поэтому я оцениваю Ruby в скобках, чтобы увидеть, является ли этот объект запроса belongs_to current_user, и если это так, я добавляю класс highlight к див. Просто решил поделиться этим лакомым кусочком, если кто-то еще не понял этого. - person Robert Klubenspies; 31.08.2011