在Rails中上传后解析文件

时间:2014-04-12 20:12:06

标签: ruby-on-rails paperclip nokogiri

我希望能够将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,所以我认为它应该做我想要的。任何帮助将不胜感激。

0 个答案:

没有答案