首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >弃用警告:您正在尝试在Rails 3.2.8中创建属性‘`info’

弃用警告:您正在尝试在Rails 3.2.8中创建属性‘`info’
EN

Stack Overflow用户
提问于 2013-02-28 04:14:36
回答 1查看 1.6K关注 0票数 3

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

控制器操作如下所示:

代码语言:javascript
复制
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文件如下所示:

代码语言:javascript
复制
class MaterialPdf < Prawn::Document
  def initialize(material)
    super
    @material = material
    text "Placeholder text"
  end
end

我从日志中得到的错误消息很奇怪:

代码语言:javascript
复制
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‘。我还是不明白。帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-28 06:05:25

对虾正在尝试创建该属性:

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

我认为更好地解释了它:

Deprecation warning for creating attribute 'currency'

不管怎么说,我觉得你打错电话了。Document.new接受一个选项散列:

代码语言:javascript
复制
def initialize(options={},&block)

所以你需要把它传递给超类,而不是material实例:

代码语言:javascript
复制
class MaterialPdf < Prawn::Document
  def initialize(material, prawn_opts = {})
    super(prawn_opts)
    @material = material
    text "Placeholder text"
  end
end
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15121478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档