如何使用Rails 4.2将渲染视图保存到文件

时间:2015-06-22 20:36:15

标签: ruby-on-rails

我的网站有一个RSS Feed,路径为http://example.com/rss

我现在要为Outbrain提供一个Feed,他们需要一个包含大约5000个内容的Feed。我可以提供饲料" live"但我选择添加一个任务计划,以便在公共文件夹中保存我的Feed离线。每天晚上我都会更新Feed。

我在我的内容类中添加了一个类方法......

def self.render_outbrain
    data = render_to_string( :controller=>:NewsFeedController, :action => :outbrain )
    File.open('outbrain.xml','w'){|f| f << data }
  end

但它在Rails 4.2中不起作用:

NoMethodError: undefined method `render_to_string' for main:Object

我想将http://example.com/rss的输出保存到静态文件http://example.com/feed.rss

修改

这是我的任务:

task :generate_feed_rake => :environment do
  session = ActionDispatch::Integration::Session.new(Rails.application)
  session.get "/generate_feed"
end

这是我的控制器

  def generate_feed

    # the news items
    @items = Content.published.limit(1000)

    # this will be our Feed's update timestamp
    @updated = @items.first.updated_at unless @items.empty?

    respond_to do |format|
      format.atom { render :layout => false }
      format.rss { redirect_to feed_path(:format => :atom), :status => :moved_permanently }
    end   

  end

1 个答案:

答案 0 :(得分:1)

render_to_stringActionController::Base中定义。除非您的类继承自该类,否则您的对象不知道如何render_to_string

目前还不清楚你要完成的是什么,但render_to_string的工作方式是,在控制器中,不是为浏览器呈现HTML视图,而只是将HTML作为字符串发回< / p>