ruby-on-rails – 如何在RoR中上传文本文件并将内容解析到数据库中

到目前为止,我已设法上传文件
# In new.html.erb
<%= file_field_tag 'upload[file]' %>

并访问控制器中的文件

# In controller#create
@text = params[:upload][:file]

但是,这只给出了文件名,而不是文件内容.我如何访问其内容

我知道这是一个跳转,但是一旦我可以访问文件内容,是否可以上传文件夹并遍历文件

解决方法

完整的例子

例如,上传包含联系人的导入文件.您不需要存储此导入文件,只需处理它并将其丢弃即可.

路线

的routes.rb

resources :contacts do 
  collection do
    get 'import/new',to: :new_import  # import_new_contacts_path

    post :import                       # import_contacts_path
  end
end

形成

意见/联系人/ new_import.html.erb

<%= form_for @contacts,url: import_contacts_path,html: { multipart: true } do |f| %>

  <%= f.file_field :import_file %>

<% end %>

调节器

控制器/ contacts_controller.rb

def new_import
end

def import
  begin
    Contact.import( params[:contacts][:import_file] ) 

    flash[:success] = "<strong>Contacts Imported!</strong>"

    redirect_to contacts_path

  rescue => exception 
    flash[:error] = "There was a problem importing that contacts file.<br>
      <strong>#{exception.message}</strong><br>"

    redirect_to import_new_contacts_path
  end
end

联系型号

车型/ contact.rb

def import import_file 
  File.foreach( import_file.path ).with_index do |line,index| 

    # Process each line.

    # For any errors just raise an error with a message like this: 
    #   raise "There is a duplicate in row #{index + 1}."
    # And your controller will redirect the user and show a flash message.

  end
end

希望有所帮助!

约书亚

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...