Rake задача для доступа к моделям - PullRequest
0 голосов
/ 23 января 2012

Я пытаюсь получить доступ к модели с именем Book из грабли, например, так:

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 , но, возможно, он немного отключен для рельсов 3.1

* edit Book.all возвращает что-то, когда я помещаю Book.all.to_yaml, так что ошибка to_sym, вероятно, что-то еще в av.render

Я понял, в чем проблема. Я имел в виду переменную экземпляра с моей точки зрения.

Может кто-нибудь сказать мне, как продолжать использовать переменные экземпляра, устанавливая эту переменную?

Это рабочая версия, когда я изменяю переменные экземпляра на: params variable

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

1 Ответ

0 голосов
/ 25 апреля 2012

вы, вероятно, должны использовать переменные экземпляра.

@book = Book.first 

и в вашем рендере

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

также, я думаю, вы хотите

:layout => nil 
...