我有这门课。我在这里使用builder gem。
class ClientsExportXML
def initialize(current_user)
@file = File.new("#{Rails.root}/public/data.xml", 'w')
@clients = Repository::Clients.new(current_user).all
@builder = Builder::XmlMarkup.new(:target=> @file, :indent=> 2)
end
def build
@builder.instruct! :xml, :version=>"1.0", :encoding=>"UTF-8", :company => "Tougg"
@builder.clients do
@clients.each do |c|
@builder.client do
@builder.name(c.name)
@builder.razao_social(c.corporate_name)
@builder.rg(c.rg)
@builder.cpf(c.cpf)
@builder.inscricao_estadual(c.state_registration)
@builder.cnpj(c.cnpj)
@builder.email(c.email)
if c.address
@builder.numero_rua(c.address.street_name)
@builder.bairro(c.address.district)
@builder.complement(c.address.complement)
@builder.cep(c.address.zipcode)
@builder.cidade_estado("#{City.find(c.address.city_id).name}/#{City.find(c.address.city_id).state.symbol}")
end
@builder.telefones do
c.phones.each do |f|
@builder.numero(f.number)
end
end
@builder.notas do
c.notes.each do |n|
@builder.nota do
@builder.nota(n.note)
@builder.adicionada_em(n.created_at.strftime("%d/%m/%y"))
end
end
end
end
end
end
@file.close
end
end
例如,当我在rails控制台中执行此操作时,一切正常。但是,我不知道为什么,当我尝试在某个控制器中添加它时:
def export
....
ClientsExportXML.new(current_user).build
...
end
该文件在public / data.xml创建,但没有内容(空文件)。
我对这里可能发生的事情感到有些困惑。
提前致谢
Édipo
我将文件更改为实例变量,并在方法构建结束时关闭文件。我更新了代码以反映这一点。
答案 0 :(得分:0)
尝试在@builder.target!
方法的最后一行添加build
。 target!
方法从构建器生成XML。
编辑:
def export
..
File.open(file_path, "w") do |f|
f.write(ClientsExportXML.new(current_user).build)
end
..
end
你的export
方法看起来像这样吗?