弃用警告:您正在尝试在 Rails 3.2.8 中创建属性"info"



我试图通过Prawn添加pdf生成到我的Rails 3应用程序。我正在遵循Railscast,一切都很顺利,直到我尝试将实例变量从我的控制器传递到我创建的一个单独的类。

控制器动作如下:

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)

这是奇怪的,因为查询看起来很好,我不是试图创建一个属性'info'。我不明白。帮助。

是虾想要创建这个属性:

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

我认为这解释得更好:

创建属性'currency'

不管怎样,我认为你实际上把super叫错了。文档。New接受一个选项哈希值:

def initialize(options={},&block)

所以你需要传递那个,而不是材质实例给超类:

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

最新更新