Смешивание Руби и Хамла - PullRequest
       2

Смешивание Руби и Хамла

3 голосов
/ 08 декабря 2011

Я бы хотел использовать методы 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")

Вывод будет таким же, как в первом блоке.

IsЕсть ли способ сделать это?Если нет, то в конечном итоге я ищу элегантный способ создания разметки с помощью вспомогательных методов Ruby.Если у вас есть предложения, как это сделать, я бы хотел услышать это.Я новичок в Rails и не очень люблю ERB, но, возможно, я что-то упустил.Во всяком случае, я открыт для предложений.

Ответы [ 2 ]

5 голосов
/ 09 декабря 2011

Вам никогда не нужно определять метод в файле представления в Rails.Это верно, будь то язык ERb, Haml или что-то еще.Вместо этого поместите метод в вспомогательный файл, затем просто вызовите его в своем представлении:

app / helpers / some_helper.rb

module SomeHelper
  def button(text)
    content_tag :div, text, :class => :button
  end
end

app / views / what / view.html.haml

= button 'My First Button'
= button 'My Second Button'

Если вам понадобится много сложных помощников, используйте вместо этого партиалы и / или исследуйте камень Cells.

1 голос
/ 09 декабря 2011

То, что вы хотите сделать, возможно. Есть некоторая документация со страницы HAML , и вот мое предположение, как вы можете использовать ее в своей ситуации:

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-виджетов / элементов

...