如何在 .html.slim 文件之间传递 ruby 变量

How to pass ruby variables between .html.slim files

我有电子邮件模板,我在其中保留并使用 ruby 个变量:

### mailer/_body.html.slim

ruby:
  start_day_number = @absence.starts_on.strftime('%d').to_i.ordinalize
  end_day_number = @absence.ends_on.strftime('%d').to_i.ordinalize
  start_date = @absence.starts_on.strftime('#{start_day_number} of %B (%A)')
  end_date = @absence.ends_on.strftime('#{end_day_number} of %B (%A)')
  type = @absence.type.capitalize
  status = @absence.status.capitalize

p class="details"
  | Starts: <b>#{start_date}</b><br />
  | Ends: <b>#{end_date}</b><br />
  | Type: <b>#{type}</b><br />
  | Status: <b>#{status}<b><br />

有没有更方便和可读的方式将这些变量存储在另一个 .slim 文件中并将它们传递给模板?

最理想的情况是,我希望将它们存储在这样的布局目录中:

### layouts/mailer.html.slim

doctype html
html
  head
    meta charset="utf-8"
    css:
      ...
  body
    ruby:
      start_date = @absence.starts_on.strftime('#{start_day_number} of %B (%A)')
      end_date = @absence.ends_on.strftime('#{end_day_number} of %B (%A)')
      ...
    == yield

..但是没用。

事实证明,装饰器模式正是我所需要的。谢谢汤姆勋爵!