我的网站有一个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
答案 0 :(得分:1)
render_to_string
在ActionController::Base
中定义。除非您的类继承自该类,否则您的对象不知道如何render_to_string
。
目前还不清楚你要完成的是什么,但render_to_string
的工作方式是,在控制器中,不是为浏览器呈现HTML视图,而只是将HTML作为字符串发回< / p>