3

只是偶然发现了一个问题,到现在,无法解决。所以这里是设置:

我有一个从数据库中获取并呈现为 html 的 ERB 模板

Class MyController < ApplicationController

  include AssetTagHelper
  ...
  def Show
    template=Page.find(...)   # <%=image_tag('Test.png')%>
    @html=ERB.new(template).result(binding)
  end
  ...

现在问题是 image_tag 'src' 解析为 '/images/Test.png',而通常它应该解析为 '/assets/Test.png'。因此,我查看了AssetTagHelper的 rails 源代码,这使我找到了AssetUrlHelper和以下调用链:image_path => asset_path => compute_asset_path。并且 compute_asset_path 合法地声明它实际上应该解析为 /images/Test.png ...

我在这里想念什么?我怎样才能使图像标签工作并给我'assets/Test.png'?

提前感谢所有回复!

4

2 回答 2

2

仅作记录-在调试时发现通常在 sprockets-rails-2.0.1/lib/sprockets/rails/helper.rb 中会覆盖 compute_asset_path

@html=ERB.new(template).result(binding)通过从控制器移动到视图解决了该问题。希望这对某人有帮助))

于 2013-11-14T20:45:27.810 回答
1

例如,我展示了如何从数据库为 Mailer 类创建 ERB。对于其他类都一样。

已完成邮件程序以从数据库创建电子邮件模板:

class UserMailer < ActionMailer::Base

      # included helper
      include ActionView::Helpers::NumberHelper
      include ActionView::Helpers::TextHelper
      # another helpers...
      # included helper

      def mailer(from, to, subject, path, name)
        mail( from: from, to: to, subject: subject, template_path: path, template_name: name )
      end

      def get_template(template_name)
        @erb = EmailTemplate.where(name: template_name, mailer_name: UserMailer.to_s.underscore).first rescue ''
        @template_content_html = ERB.new(@erb.template_html).result(binding).html_safe rescue ''
        @template_content_text = ERB.new(@erb.template_text).result(binding).html_safe rescue ''
      end

      def test(user_id)
        from = 'from@mail.com'
        recipients = 'to@mail.com'
        subject = "test"
        template_path = "user_mailer"
        get_template(__method__) #def
        template_name = "general"
        mailer(from, recipients, subject, template_path, template_name)
      end

    end

对于在 Mailer 中包含帮助程序,您可以使用如下构造:

include ActionView::Helpers::NumberHelper

从 rails 3.2.13 完美运行。之前没试过。

于 2015-06-29T00:15:59.383 回答