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

时间:2014-03-16 14:00:13

标签: ruby-on-rails haml

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

在我的 _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

问题是html代码已呈现,我不知道如何在按钮变量中放置这些代码。 谢谢你的建议。

2 个答案:

答案 0 :(得分:5)

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

- 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

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

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

您必须根据实际数据进行调整,但请注意class属性的值将通过合并icon-2x和散列结果来形成,因此您可以避免某些重复。

答案 1 :(得分:0)

在when语句中为buttons分配值。并避免在Views中执行这些逻辑。

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

.my-butons
  = buttons