2013-02-27 1 views
3

Я пытаюсь добавить PDF-образование через креветку в мое приложение Rails 3. Я следую Railscast, и все идет хорошо, пока я не попытаюсь передать переменную экземпляра из моего контроллера в отдельный класс, который я создал.DEPRECATION WARNING: вы пытаетесь создать атрибут `info ', в Rails 3.2.8

действие

Контроллер выглядит следующим образом:

def show #shows some material 
@material = Material.find(params[:id]) 
respond_to do |format| 
    format.html 
    format.pdf do 
    pdf = MaterialPdf.new(@material) 
    send_data pdf.render, filename: "material_#{@material.id}.pdf", 
          type: "application/pdf", 
          disposition: "inline" 
    end 
end 

конец

и файл material_pdf.rb выглядит следующим образом:

class MaterialPdf < Prawn::Document 
    def initialize(material) 
    super 
    @material = material 
    text "Placeholder text" 
    end 
end 

Сообщение об ошибке я получаю из журнала является странным:

Material Load (0.1ms) SELECT "materials".* FROM "materials" WHERE "materials"."id" = ? ORDER BY materials.created_at DESC LIMIT 1 [["id", "27"]] 
DEPRECATION WARNING: You're trying to create an attribute `info'. Writing arbitrary attributes on a model is deprecated. Please just use `attr_writer` etc. (called from initialize at .../app/pdfs/material_pdf.rb:3) 

Это странно, потому что запрос выглядит отлично, и я НЕ пытаюсь создать атрибут «информация». Я не понимаю. Помогите.

ответ

2

Это креветка, которая пытается создать этот атрибут:

http://prawn.majesticseacreature.com/docs/0.11.1/Prawn/Document.html

Я думаю, это объясняет лучше:

Deprecation warning for creating attribute 'currency'

Во всяком случае, я думаю, что ты на самом деле вы вызова супер неправильно. Document.new принимает в хеш опций:

def initialize(options={},&block) 

Таким образом, вы должны передать, что, не экземпляр материала для суперкласса:

class MaterialPdf < Prawn::Document 
    def initialize(material, prawn_opts = {}) 
    super(prawn_opts) 
    @material = material 
    text "Placeholder text" 
    end 
end 
+0

Спасибо большое. Это сработало! – Finnjon