File.read 开发中资产的优雅方式

elegant way to File.read assets in development

我有以下代码

module EmailHelper
  def email_image_tag(image, **options)
    attachments.inline[image] = File.read(image_path(image))
    image_tag attachments[image].url, **options
  end
end

在生产中,这会引用带有哈希的正确图像,因为图像资产是预编译的,但是在开发中,这会引发文件读取异常。

有没有一种优雅的方法来执行 File.read 而无需检查是否 Rails.env.development?

这里最大的误解是我认为我应该指向一个摘要资产,忘记了这些资产是用来提供的而不是作为文件读取的。因此,该文件可以完美地从资产地图中加载。我解决了上面的问题如下:

module MailHelper
  def mail_image_tag(image, **options)
    path = Rails.root.join('app', 'assets', 'images', image)

    attachments.inline[image] = File.read(path)
    image_tag attachments[image].url, **options
  end
end