我希望能够将xml文件上传到我的rails应用程序,然后让它解析整个文件并根据内容生成ActiveRecord条目。
我已经整理了一个使用nokogiri的解析器,它在vanilla Ruby中运行良好,所以没有问题,但由于某种原因Rails似乎想要在我甚至点击上传按钮之前运行它以提供它文件。当我尝试转到上传页面时,我会收到此
TypeError in FoobarsController#create
no implicit conversion of nil into String
我的样子看起来像这样:
应用程序/模型/ foobar.rb
class Foobar < ActiveRecord::Base
attr_accessible :xml_file
has_attached_file :xml_file
before_save :parse_file
def parse_file
require 'xml_parser'
myFile = xml_file.queued_for_write[:original]
fooParser = Nokogiri::XML::SAX::Parser.new(FoobarParser.new)
fooParser.parse(File.open(myFile,mode='r'))
end
end
应用程序/控制器/ foobars_controller.rb
class FoobarsController < ApplicationController
def new
@foobar = Foobar.new
end
def create
@foobar = Foobar.new(params[:foobar])
if @foobar.save
redirect_to @foobar
else
render 'new'
end
end
end
应用程序/视图/ foobars / new.html.erb
<h1>Upload foobar</h1>
<div class="row">
<div class="span6 offset3 center">
<%= form_for(@foobar) do |f| %>
<%= f.file_field :xml_file %>
<%= f.submit %>
<% end %>
</div>
</div>
我想这是控制器的创建方法的一个问题,但我的代码基于this,所以我认为它应该做我想要的。任何帮助将不胜感激。