我已经阅读了很多关于在rake任务/后台作业/模型中渲染Rails部分和视图的内容.我在Stackoverflow和Web上发现的绝大多数事情描述了在Rails 3中工作的方法,但它们似乎过时了,我没有让它们工作(即使花了很多时间进行实验).
那么,如何在Rails 4中渲染后台作业中的部分?
这是迄今为止我已经研究过的最好的方法(在控制台中演示).
c = ApplicationController.new
result = c.render_to_string(partial: 'tweets/tweet', locals: {tweet: Tweet.first})
# =>
# Tweet Load (0.8ms) SELECT "tweets".* FROM "tweets" ORDER BY "tweets"."id" ASC LIMIT 1
# Author Load (0.6ms) SELECT "authors".* FROM "authors" WHERE "authors"."id" = $1 ORDER BY "authors"."id" ASC LIMIT 1 [["id", 1]]
# Status Load (0.6ms) SELECT "statuses".* FROM "statuses" WHERE "statuses"."twitter_id" = 367523226848866304 LIMIT 1
# Rendered tweets/_tweet_body.html.slim (17.5ms)
# Rendered tweets/_resolved_tweet.html.slim (23.7ms)
# Rendered tweets/_tweet.html.slim (28.1ms)
# ActionView::Template::Error: …Run Code Online (Sandbox Code Playgroud) 我有一个Rails 2.3.5应用程序,我试图从模型中呈现几个部分(我知道,我知道 - 我不应该).我这样做的原因是我将Comet服务器(APE)集成到我的Rails应用程序中,需要根据Model的事件(例如after_create)推出更新.
我试过这样做:
ActionView::Base.new(Rails::Configuration.new.view_path).render(:partial => "pages/show", :locals => {:page => self})
Run Code Online (Sandbox Code Playgroud)
这允许我渲染不是用户助手的简单部分,但是如果我尝试在我的部分中使用link_to,我会收到一条错误说明:
undefined method `url_for' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)
我确保传递给"project_path(project)"的对象不是nil.我也试过包括:
include ActionView::Helpers::UrlHelper
include ActionController::UrlWriter
Run Code Online (Sandbox Code Playgroud)
在包含进行上述"render"调用的方法的Module中.
有谁知道如何解决这个问题?
谢谢