我已经阅读了很多关于在 rake 任务/后台作业/模型中渲染 Rails 部分和视图的内容。我在 Stackoverflow 和网络上发现的绝大多数东西都描述了在 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: undefined method `tweet_path' for #<#<Class:0x007fb21bf797a0>:0x007fb21cb009e8>
# from /Users/thomasklemm/.rbenv/versions/2.0.0-p195/lib/ruby/gems/2.0.0/gems/actionpack-4.0.0/lib/action_dispatch/routing/polymorphic_routes.rb:129:in `polymorphic_url'
有任何想法吗?提前致谢!
更新:tweet_path
上面确实没有定义。此错误是由于使用实例变量链接到路径= link_to 'Tweet', [@project, tweet]
(超薄模板)导致的,该实例变量将出现在从某个控制器继承的视图中,但在此上下文之外呈现时不会出现。我通过适当的关联解决了这个问题= link_to 'Tweet', [tweet.project, tweet]
。