将haml代码保存在变量中然后使用它

edu*_*ris 4 haml ruby-on-rails

我想做这样的事情,我不知道是否有可能.我也知道这不是一个好习惯,但我处于截止日期.

在我的_buttons.html.haml中

- buttons = case params[:action]
- when 'edit'
  %a.property-save{ href: "#" }
    %i.icon-save.icon-2x
    = t('.property_save')
  ...
- when 'show'
  ...
- else
  %a.property-save{ href: "#" }
    %i.icon-open.icon-2x
    = t('.property_open')

.my-butons
  = buttons
Run Code Online (Sandbox Code Playgroud)

问题是html代码被渲染,我不知道我如何在buttons变量中放置这些代码.谢谢你的建议.

mat*_*att 7

执行所需操作的直接方法是使用capture_haml帮助程序将块捕获到字符串中以便以后重用:

- buttons = case params[:action]
- when 'edit'
  - capture_haml do
    %a.property-save{ href: "#" }
      %i.icon-save.icon-2x
      = t('.property_save')
    ...
- when 'show'
  - capture_haml do
    ...
- else
  - capture_haml do
    %a.property-save{ href: "#" }
      %i.icon-open.icon-2x
      = t('.property_open')

.my-butons
  = buttons
Run Code Online (Sandbox Code Playgroud)

你似乎在块中有很多重复,更好的方法可能是这样的:

.my-buttons
  %a.property-save{ href: "#" }
    %i.icon-2x{:class => "icon-#{params[:action]}"}
    = t(".property_#{params[:action]}")
Run Code Online (Sandbox Code Playgroud)

您必须根据实际数据进行调整,但请注意,class通过合并icon-2x哈希值和结果,可以形成属性的值,这样可以避免重复.