解析使用camt_parser rails gem

时间:2018-06-11 19:41:55

标签: ruby-on-rails ruby bank

我在rails应用程序中安装了camt_parser gem。 我的目标是上传和解析camt_file(.xml)。

当我以这种方式从本地文件解析时,它的工作正常:

require 'camt_parser'
require 'camt'
camt = CamtParser::File.parse 'CAMT053_140518.xml'
puts camt.group_header.creation_date_time
camt.statements.each do |statement|
    statement.entries.each do |entry|
        # Access individual entries/bank transfers
     #   puts "->"
     puts entry.description
     puts entry.debit
     p entry.transactions[0].iban
     p entry.transactions[0].transaction_id
     puts entry.transactions[0].debitor.iban
    end
end

但是当我尝试使用此代码将其作为文件从我的视图上传时:

<%= form_tag '/patient_page/import_camt', :multipart => true do %>
    <label for="file">Upload text File</label> <%= file_field_tag "file" %>
    <%= submit_tag %>
<% end %>

相应的方法:

def import_camt
    uploaded_file = params[:file]
    parsed_file = uploaded_file.read
    camt = CamtParser::File.parse uploaded_file
    puts camt.group_header.creation_date_time
    camt.statements.each do |statement|
        statement.entries.each do |entry|

        puts entry.description
        puts entry.debit
        p entry.transactions[0].iban
        p entry.transactions[0].transaction_id
        puts entry.transactions[0].debitor.iban
        end
    end
  end

我收到以下错误

“没有将ActionDispatch :: Http :: UploadedFile隐式转换为String” 在我尝试解析上传文件时的行。

任何提示?

THX!

1 个答案:

答案 0 :(得分:0)

CamtParser::File.parse期待文件路径但您传递的是ActionDispatch::Http::UploadedFile对象。

在rails中上传文件时,文件将包含在ActionDispatch::Http::UploadedFile的实例中。要访问文件本身,有一个名为tempfile的属性。

这将返回代表正在上传的实际文件的TempfileTempfile有一个path方法,它是文件本身的路径,因此CamtParser::File.parse期待文件路径,可以按如下方式调用

CamtParser::File.parse(uploaded_file.tempfile.path) 

CamtParser还有一个String类,可以解析相应的字符串,因此您可以将其称为

CamtParser::String.parse(uploaded_file.read)

这是有效的,因为ActionDispatch::Http::UploadedFile公开方法read,这与调用uploaded_file.tempfile.read

相同