【问题标题】:Rails Custom ActionView::Template::Handler no data sentRails 自定义 ActionView::Template::Handler 未发送数据
【发布时间】:2019-06-06 02:17:23
【问题描述】:

我正在尝试在 rails 5.2.3 中为 CSV 创建模板处理程序

当我通过模板渲染任何东西时,我得到的只是没有发送数据的文件的“网络错误”

我似乎在网上找不到任何关于实例变量如何从控制器传递到模板的信息。如果我使用 eval 或 instance_eval,我会收到未找到变量的错误

require 'csv'
require 'action_view'

class CSVHandler
  VERSION = '0.5.2'

  class CSVGenerator
    def self.generate
      file = CSV.generate(encoding: 'UTF-8', force_quotes: true) do |csv|
        yield csv
      end
      file.html_safe
    end
  end

  class << self
    def default_format
      Mime[:csv]
    end

    def call(template)
      # how can I get the controller headers and response body here???

      <<-RUBY
        begin
          CSVHandler::CSVGenerator.generate do |csv|
            #{template.source}
          end
        end
      RUBY
    end

    def handles_encoding?
      true
    end

  ene
end

ActionView::Template.register_template_handler :csvrb, CSVHandler

示例模板:

csv << [
  'Remit Number',
  'Positive Amount',
  'Negative Amount',
  'Successful Amount',
  'Failed Amount',
  'Net Amount',
  'Recorded?',
  'Reconciled?',
  'Locked?',
  'Link'
]
@remittance_list.each do |remittance|
  csv << [
    remittance.remit_number,
    remittance.positive_amount,
    remittance.negative_amount,
    remittance.successful_amount,
    remittance.failed_amount,
    remittance.net_amount,
    remittance.recorded,
    remittance.reconciled,
    remittance.locked,
    remit_form_url(remittance.remit_number),
  ]
end

【问题讨论】:

    标签: ruby-on-rails templates renderer actionview


    【解决方案1】:

    我的问题是我将内容编码设置为deflate(我习惯于流式传输 CSV,我想保留该功能),删除它后,一切都按预期工作

    我最终需要为我正在寻找的功能创建一个完整的 gem(带有模板的完整流式传输)。有兴趣可以看看csv_rb

    【讨论】:

    • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
    • @Andreas 我确实包含了基本部分。我包括一个deflate 内容编码标头。删除它解决了问题
    • 该链接适用于相关的 gem,但不是问题的答案。也许在标记或评论链接之前阅读答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 2012-11-21
    • 1970-01-01
    • 2015-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多