Смешивание Рубина и хамла
Я хотел бы использовать методы Ruby для создания разметки, которая часто появляется на моих страницах. В сущности, я хочу сделать эквивалент этого (ERB-файл):
<% def create_button(text) %>
<div class="button"><%= text %></div>
<% end %>
...
<%
create_button("My First Button")
create_button("My Second Button")
# etc.
%>
Очевидно, идея заключается в том, что каждый раз, когда мне нужна кнопка, Я использую create_button
.
Решение Ruby/HAML, которое я себе представляю, будет выглядеть примерно так:
def create_button(text)
%div.button text
end
create_button("My First Button")
create_button("My Second Button")
Выход этого будет таким же, как и у первого блока.
Есть ли способ сделать это? Если нет, то в конечном счете я ищу элегантный способ генерировать разметка с помощью вспомогательных методов Ruby. Если у вас есть какие-либо предложения о том, как это сделать, я хотел бы их услышать. Я новичок в Rails и не очень люблю ERB, но, возможно, я что-то упускаю. В любом случае, я открыт для предложений.
2 ответа:
Вам никогда не нужно будет определять метод в файле представления в Rails. Это верно независимо от того, является ли язык ERb, Haml или чем-то еще. Вместо этого поместите метод во вспомогательный файл, а затем просто вызовите его в своем представлении:
Приложение / помощники / some_helper.rb
module SomeHelper def button(text) content_tag :div, text, :class => :button end end
App / views / whatever/view.формат html.haml
= button 'My First Button' = button 'My Second Button'
Если вам понадобится много сложных помощников, используйте вместо них партиалы и / или исследуйте драгоценный камень клеток.
То, что вы хотите сделать, возможно. Есть некоторая документация со страницы HAML , и вот мое предположение, как вы могли бы использовать ее в вашем situtation:
def my_thing haml_engine = Haml::Engine.new(".div_class this is my attempt at HAML") haml_engine.render end
Сказав это, я предлагаю вам не делать что-то подобное, а вместо этого использовать Rails (встроенные) помощники или шаблон Presenter (появляющийся в сообществе Rails через мой собственный delegate_presenter или Draper для создания сложных HTML виджетов / элементов