【问题标题】:Rails 3.1 - Using Devise/Cancan with PrawnRails 3.1 - 使用 Devise/Cancan 和 Prawn
【发布时间】:2012-08-20 10:51:51
【问题描述】:

在我的 html.erb 视图中,我通常可以使用如下代码:

if current_user.role?(:label)
"do something"
end

我正在尝试在基于 Prawn 的 PDF 中执行相同的操作,但收到“未定义的局部变量或方法 `current_user'”错误。

我知道我需要在我的 PDF 类中明确包含一个帮助程序,例如:

class SalesnotePdf < Prawn::Document
  include CanCan::Ability
  "do pdf layout here"
end

但这似乎不起作用?关于正确包含或其他方法的任何想法?

提前致谢!

编辑: 我认为 current_user 实际上是我需要访问的 Devise 方法。

【问题讨论】:

    标签: ruby-on-rails ruby devise cancan prawn


    【解决方案1】:

    嗯,current_user 确实是一种设计方法,可用于视图、助手和控制器,但不能用于模型。更好的方法是检查用户在控制器中的角色,然后调用特定的 Prawn 文档。

    【讨论】:

      【解决方案2】:

      除非每个用户需要显着不同的报告,否则您可以将 view_context 作为参数之一传递。

      控制器

      ...
      format.pdf do
      ...
          pdf = MyPdf.new @records, reportDate, view_context
      ...
      end
      

      然后在 MyPdf 中你选择它...

      def initialize(records, reportDate, view)
          super()
          @nonPagedTransactions = transactions
          @view = view
      

      ....

      所以现在它可用于 MyPdf 中的所有方法(以及其他视图上下文帮助器),如果您说...

      @view.current_user
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-15
        • 2013-05-07
        • 1970-01-01
        • 2017-06-04
        相关资源
        最近更新 更多