首页 > 解决方案 > 如何在 .html.slim 文件之间传递 ruby​​ 变量

问题描述

我有电子邮件模板,我在其中保存和使用 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 目录中,如下所示:

### 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

..但它没有工作。

标签: ruby-on-railsrubyslimactionmailer

解决方案


装饰器模式正是我所需要的。谢谢汤姆勋爵!


推荐阅读