【问题标题】:How do I keep my current model in scope inside my method如何在我的方法中保持当前模型的范围
【发布时间】:2012-10-05 02:04:39
【问题描述】:

我有一个 Rails 模型,在其中一种方法中,我使用 prawn 生成 pdf,如下所示;

class Report < ActiveRecord::Base

  def pdf_output
    Prawn::Document.new do
      text "Start date: #{start_date.strftime('%e %b %Y').squish}"
    end
  end

end

在该文本方法中,我试图输出我的报告模型的 start_date 属性。相反,我收到以下错误

NoMethodError in ReportsController#show

undefined method `start_date' for #<Prawn::Document:0x007fdafbce6930>

所以我的 start_date 方法是指我的 Document 对象而不是我的 Report 对象。如何从这个块中访问我的报表对象的变量和方法?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 scope prawn


    【解决方案1】:

    通常的 JavaScript 技巧应该可以工作:

    def pdf_output
      report = self
      Prawn::Document.new do
        text "Start date: #{report.start_date.strftime('%e %b %Y').squish}"
      end
    end
    

    只需获取您需要的self 的引用,这样您就不必担心Prawn 在您的块内对self 做了什么。

    【讨论】:

    • 我正要回答这个问题,但我有一种偷偷摸摸的感觉,我把 Ruby 的 self 和 Javascript 的 this 混在一起了……这两者在某些方面是如此相似,但在某些方面却如此不同其他。我猜大部分不同。
    • mu 再次进行救援。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-10
    • 2014-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多