Мой вопрос касается Rails + HAML

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

Единственные решения, которые я нашел в Google, говорят мне использовать условное выражение в HAML. Но я не думаю, что это лучший подход, поскольку представления не должны иметь никакого логического управления.

Итак, как я мог сделать это прямо с контроллера? Какие именно переменные контроллера могут устанавливать класс тега html?

1
alexandrecosta 11 Мар 2012 в 22:36

3 ответа

Лучший ответ

Haml действительно не рекомендует использовать логику в представлениях и вместо этого упрощает создание помощников. Итак, одним из решений было бы создать свой вспомогательный метод с любой логикой внутри.

Вы не можете управлять разметкой html с контроллеров, для этого предназначены представления. Если вы не хотите создавать отдельный помощник (это слишком много для ваших требований), используйте существующий tag помощник, который поставляется с рельсами. Он принимает хэш параметров, которые при желании можно инициализировать с вашего контроллера.

Но опять же, я бы пошел за помощником.

1
Valentin V 11 Мар 2012 в 18:42

Для простой логики (например, установки класса) вы можете использовать haml_tag, который представляет значение атрибута класса в виде строки:

- haml_tag :th, class: "#{'hilite' if params[:order_by]=='title'}" do
    - haml_concat link_to 'Movie Title', movies_path(order_by: 'title')

Таким образом, у вас все еще есть условная логика в представлении, но использование помощника в этом случае может быть излишним.

1
egres 14 Мар 2012 в 04:50

Если вам не нужна логика в ваших haml-шаблонах, вам следует переместить ее в помощник. На самом деле у контроллера нет способа установить класс для определенного тега html; контроллеры не для этого.

0
James 11 Мар 2012 в 18:40