0

我正在尝试访问Book从像这样的 rake 任务调用的模型

task :create_epubs => :environment do
  include Rails.application.routes.url_helpers # brings ActionDispatch::Routing::UrlFor
  include ActionView::Helpers::TagHelper

  av = ActionView::Base.new(Rails.root.join('app', 'views'))

  books = Book.all
  av.render("books/", :books => books)
end

但我收到以下警告

rake aborted!
undefined method `to_sym' for nil:NilClass

Tasks: TOP => create_epubs
(See full trace by running task with --trace)

我正在尝试加载如下环境,从 rake 任务中访问 rails 模型,但对于 rails 3.1 可能有点偏离

*edit Book.all 在我 puts Book.all.to_yaml 时返回一些东西,所以 to_sym 错误可能是 av.render 中的其他东西

我已经弄清楚问题所在了。从我的角度来看,我指的是实例变量。

谁能告诉我如何通过设置该变量来继续使用实例变量?

这是我将实例变量更改为 :params 变量时的工作版本

task :create_epubs => [:environment] do
  av = ActionView::Base.new(Rails.root.join('app', 'views'), :assigns => self)
  av.view_paths = ActionController::Base.view_paths
  av.extend ApplicationHelper #or any other helpers your template may need

  book = Book.first

  puts av.render(:template => "books/epub-show", :locals => {:book => book}, :layout => false) # this isn't passing @book to the view correctly, i get undefined method for nil:nilClass
end
4

1 回答 1

0

您可能应该使用实例变量。

@book = Book.first 

在你的渲染中

:locals => { :book => @book } 

还有,我想你想要

:layout => nil 
于 2012-04-24T22:44:32.280 回答