Rails 自定义 ActionView::Template::Handler 未发送数据
Rails Custom ActionView::Template::Handler no data sent
我正在尝试为 rails 5.2.3
中的 CSV 创建模板处理程序
当我通过模板呈现任何内容时,我得到的只是 "Network Error" 没有数据发送的文件
我似乎无法在网上找到任何关于实例变量如何从控制器传递到模板的信息。如果我使用 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
我的问题是我将 content-encoding 设置为 deflate
(我习惯流式传输 CSV,我想保留该功能),删除它后,一切都按预期工作
我最终需要为我正在寻找的功能创建一个完整的 gem(使用模板进行完整流式传输)。有兴趣可以看看csv_rb
我正在尝试为 rails 5.2.3
中的 CSV 创建模板处理程序当我通过模板呈现任何内容时,我得到的只是 "Network Error" 没有数据发送的文件
我似乎无法在网上找到任何关于实例变量如何从控制器传递到模板的信息。如果我使用 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
我的问题是我将 content-encoding 设置为 deflate
(我习惯流式传输 CSV,我想保留该功能),删除它后,一切都按预期工作
我最终需要为我正在寻找的功能创建一个完整的 gem(使用模板进行完整流式传输)。有兴趣可以看看csv_rb