混合Ruby和HAML

时间:2011-12-08 19:54:44

标签: ruby ruby-on-rails-3 haml

我想使用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 个答案:

答案 0 :(得分:5)

您永远不需要在Rails中的视图文件中定义方法。无论语言是ERb,Haml还是其他任何东西都是如此。相反,将方法放在帮助文件中,然后在视图中调用它:

应用程序/助手/ some_helper.rb

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

应用程序/视图/不管/ view.html.haml

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

如果最终需要大量复杂的助手,请改用partials,和/或调查Cells gem。

答案 1 :(得分:1)

你想做的事情是可能的。有一些documentation from the HAML page,我想你可以在你的场景中使用它:

def my_thing
  haml_engine = Haml::Engine.new(".div_class
     this is my attempt at HAML")
  haml_engine.render
end

话虽如此,我建议你不要做那样的事情,而是使用Rails(内置)帮助器或Presenter模式(通过我自己的delegate_presenter或{{3出现在Rails社区中创建复杂的HTML小部件/元素