Вы бы поместили эту часть HTML-разметки в так называемую частичную - что-то, что может быть визуализировано как маленький фрагмент большего макета. Вы правы, вам не захочется хранить формат в модели, потому что вы, возможно, захотите визуализировать этот конкретный HTML-код для веб-браузеров, а также очень похожий XML или JSON для клиентов, использующих API, и визуализировать некоторый другой очень похожий контент в ASN.1 или YAML для других клиентов. «Вид» действительно должен оставаться связанным с представлениями.
В этом конкретном примере вы, вероятно, пошли бы еще дальше и предоставили статьи для рендеринга через переменную, а не позволяли представлению находить сами статьи:
Контроллер:
def flubber:
@articles = Article.find_each(some_criteria)
end
Вид:
<div class="article_list_wrapper">
<%= render :partial => "article_list", :collection => @articles %>
</div>
И затем предоставьте View для соответствующего контроллера с именем _article_list
:
<h1><%= article.title %></h1>
<p><%= article.body %></p>
Если <div class="...">
будет идентичным при каждом использовании этого партиала, вы можете передать :template
в партиал, или поместить его в помощник вида, или поместить весь рендер с :template
аргумент в представлении помощника. (Либо первый, либо последний подход здесь - это то, что я бы сделал - <div class="...">
не кажется настолько важным, чтобы требовать собственный файл , но если бы он был более сложным, он мог бы - и тогда я не хотел бы давать частичный аргумент :layout
каждый раз, когда мне это нужно.)