Rabl.render:如何使用视图助手方法?

eir*_*kir 6 xml ruby-on-rails view-helpers ruby-on-rails-3.2 rabl

我正在使用Rabl在rake任务中生成XML输出:

xml = Rabl.render @listings, 'feeds/listings', :format => :xml
# do stuff with xml
Run Code Online (Sandbox Code Playgroud)

但是,我需要在引用的rabl视图文件中使用多个辅助方法,并且NoMethodError我会从这个问题的答案中得到一个正如我所期望的那样.

我尝试使用extends,并include在使用的rake任务,但该类我仍然得到的helper方法同样的错误:

require "#{Rails.root}/app/helpers/feeds_helper.rb"

class SerializeData
  extends FeedsHelper

  def perform
    xml = Rabl.render @listings, 'feeds/listings', :format => :xml
    # do stuff with xml
  end
end
Run Code Online (Sandbox Code Playgroud)

我的问题是:有没有办法在这种方式生成的rabl视图文件中使用辅助方法?(或者至少在某种程度上我仍然可以将它们作为rake任务中的字符串渲染?)帮助器方法被用于许多次,以便按照固定的要求正确地格式化各种数据,因此很难完全删除它们.

eir*_*kir 7

我最终得到了一个猴子补丁解决方案.

我注意到NoMethodFound错误来自Rabl::Engine类的实例,所以我在该类中包含了所需的路由和辅助方法,然后才能访问它们:

require "#{Rails.root}/app/helpers/feeds_helper.rb"
...
class Rabl::Engine
  include Rails.application.routes.url_helpers
  include FeedsHelper
end
Run Code Online (Sandbox Code Playgroud)

另请注意,url除了path帮助程序(例如root_urlroot_path)之外,还需要设置URL主机:

Rails.application.routes.default_url_options[:host] = "www.example.com"
Run Code Online (Sandbox Code Playgroud)

我肯定更喜欢非猴子补丁解决方案,或者至少根据所提供的动作的控制器,根据需要包含助手.我等着接受这个,看看是否有人能想出这样的答案.