Почему помощники не должны иметь html в них? - PullRequest
8 голосов
/ 25 сентября 2008

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

Спасибо!

-fREW

Ответы [ 6 ]

15 голосов
/ 25 сентября 2008

Мой совет - если это небольшие кусочки HTML (пара тегов), не беспокойтесь об этом. Более того - подумайте о частичках (поскольку объединение строк html в помощнике - это боль, с которой хорошо справляются представления).

Я регулярно включаю HTML в мои помощники (напрямую или через вызовы методов Rails, таких как link_to). Мой мир не рухнул вокруг меня. На самом деле, я бы сказал, что мой код очень чистый, понятный и понятный благодаря этому.

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

5 голосов
/ 26 сентября 2008

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

Однако существует постоянная проблема читабельности кода. Если у вас есть помощник, который просто создает большую строку необработанного HTML, то это будет трудно понять. Хотя генерация HTML-кода в помощниках вполне приемлема, вы должны делать это, используя content_tag и render :partial вместо return %Q(<a href="#{something}">#{text}>)

2 голосов
/ 25 сентября 2008

Это не полный ответ на ваш вопрос, но вы можете создать html в своих тегах с помощью метода content_tag Мое предположение о том, почему будет чистота кода.

Кроме того, content_tag позволяет вкладывать теги в блоки. Прочтите это сообщение в блоге на content_tag .

1 голос
/ 30 июня 2011

В Rails 3 вы можете использовать * html_safe * Строковый метод, чтобы ваши вспомогательные методы возвращали HTML-теги, которые не будут экранированы.

0 голосов
/ 05 августа 2012

Я обычно добавляю html в партиалы.

Подумайте о семантике. Если вы поместите html в строку, вы потеряете его смысловой аспект: он становится строкой, а не разметкой. Очень разные. Например, вы не можете проверить строку, но вы можете проверить разметку.

Причина, по которой я хочу поместить html в помощник вместо частичного (и как я нашел этот поток), заключается в краткости. Я хотел бы иметь возможность написать =hr вместо =render 'hr'.

Чтобы ответить на вопрос, который я не задавал ;-): чтобы отключить HTML в помощнике, попробуйте это

def hr
  raw '<hr />'
end
0 голосов
/ 25 сентября 2008

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

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

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