【问题标题】:How do I include routes.url_helpers into a view renderer in rails?如何将 routes.url_helpers 包含到 rails 的视图渲染器中?
【发布时间】:2013-06-24 23:38:48
【问题描述】:

我正在尝试在我的模型中渲染 html(对于 Mandrill 内联代码),但我似乎无法让 url_helpers 正确渲染

questions.haml

 %a{:href => email_question_url(question)}

模型.rb

  view = ActionView::Base.new(ActionController::Base.view_paths, @email_vars)
  view.extend ApplicationHelper
  questions_html = view.render(:partial => 'transactional_mailer/questions_html')

理想情况下我想跑步:

      view.include Rails.application.routes.url_helpers

但是使用未定义的方法包括用于 actioniew::base 的炸弹

有什么建议可以解决这个问题吗?

【问题讨论】:

    标签: ruby-on-rails urlhelper


    【解决方案1】:

    我必须通过以下方式打开实例类并在其中包含实例方法:

      view = ActionView::Base.new(ActionController::Base.view_paths,{})
    
      class << view
        include Rails.application.routes.url_helpers
      end
    
      questions_html = view.render(:partial => 'transactional_mailer/questions_html')
    

    【讨论】:

      【解决方案2】:

      在我的例子中,我需要(通过 RSpec)测试一个需要引用其中的视图实例的类,我执行了以下操作:

      let(:view) do
        ActionView::Base.new(ActionController::Base.view_paths, {}).tap do |view_instance|
          view_instance.instance_eval { self.class.include Rails.application.routes.url_helpers }
        end
      end
      

      它对我有用。它看起来不太好,但很有效。

      【讨论】:

        猜你喜欢
        • 2010-12-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-08
        • 2013-05-19
        • 1970-01-01
        相关资源
        最近更新 更多