ruby-on-rails - 如何将当前模型保留在我的方法范围内

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

我有一个 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 对象。如何从该 block 内部访问报表对象的变量和方法?

最佳答案

通常的 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 在您的 block 中对 self 做了什么。

关于ruby-on-rails - 如何将当前模型保留在我的方法范围内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12889857/

相关文章:

ruby-on-rails - 用户的未定义方法 attr_accessible 错误

ruby - 我应该学习 MacRuby 还是 RubyCocoa

mysql - PG::UndefinedColumn:错误:列sections.row_order不存在

ruby-on-rails - 更改 ActiveRecord 子集上的 'ORDER BY' 链

ruby-on-rails - Ruby on Rails 3 - 为每个请求重新加载 lib 目录

mysql - 链接一个where查询?

ruby-on-rails - 您建议使用什么 gem\plugin 来发出 HTTP 请求?

ruby-on-rails - Rails 4 + Ember-Auth + 为 Ember.js 设计入门套件

ruby - 正则表达式允许在中间使用 A-z、0-9 和破折号,从不在末端使用?

ruby-on-rails - 帮助为静态页面创建路由和 Controller