我正在尝试访问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