代码之家  ›  专栏  ›  技术社区  ›  Mongus Pong

返回前处理生成视图的最新方法

  •  2
  • Mongus Pong  · 技术社区  · 16 年前

    我的控制器里有这个。我需要我的视图来生成一些html,然后使用 Flying Saucer (我正在使用jruby)。然后返回给客户机。

      def show    
        @cs_agreement = CsAgreement.find(params[:id])
    
        respond_to do |format|
          format.pdf do
            # TODO there must be a better way of getting the path to the view!
            report_template = ERB.new(File.new("app/views/agreement_document/client_agreement.erb"), nil, "%<")
            created_report = report_template.result(binding)
    
            send_data( FlyingSaucer::create_pdf(created_report), :filename => "agreement.pdf",
                       :type => "application/pdf",
                       :disposition => 'inline')
          end
        end
    

    这是我能做的最好的…我只能解决如何使用erb手动生成html,以便在返回之前检索要发送给flyingsacker的数据。

    这种方式似乎也意味着我不能访问任何helper方法。

    有没有办法让rails为我生成html,并在返回之前截取它转换成pdf?render函数似乎只是生成并返回all-in-one..

    2 回复  |  直到 16 年前
        1
  •  1
  •   Peter    16 年前

    你可以使用 render_to_string ,如

    report_template = render_to_string 'client_agreement'
    

    与相同的选项 render . 更多细节 here .

    如果需要指定不同的控制器/操作,也可以这样做,例如通过 :action => :action_name .

        2
  •  1
  •   Harish Shetty    16 年前

    使用 render_to_string .

    def show    
      @cs_agreement = CsAgreement.find(params[:id])
    
      respond_to do |format|
        format.pdf do
          result = render_to_string
          send_data( FlyingSaucer::create_pdf(result), :filename => "agreement.pdf",
                   :type => "application/pdf",
                   :disposition => 'inline')
        end
      end
    end