【发布时间】:2015-04-09 10:52:03
【问题描述】:
我正在构建一个 ruby on rails 应用程序,它允许用户从他们的硬盘驱动器中选择一个文件,然后将文本文件中的特定行写入数据库。表格已经建好了,但是现在不知道怎么把文件的内容变成变量,格式化再写入数据库。
我有一个名为drafts 的数据库表,列有set_1、set_2、set_3。我想将第 13 行(来自文本文件)写入 set_1,将第 165 行写入 set_2,将第 317 行写入 set_3。我还想在编写这些行之前对其进行格式化。在文件中,它们看起来像这样------ FRF ------,而我只想要FRF。
我花了很多时间搜索 stackoverflow 和 rubyonrails 指南,但很难弄清楚这一点。总的来说,我对 ruby 和 rails 很陌生,因此我们非常感谢您的帮助。
这是我的控制器 (drafts_controller.rb):
class DraftsController < ApplicationController
def new
@page_title = "Upload MTGO Draft"
@draft = Draft.new
end
def create
@draft = Draft.new(draft_params)
if @draft.save
flash[:notice] = "Draft Saved!"
redirect_to drafts_show_path
else
render "new"
end
end
def index
@page_title = "MTGO Draft"
end
def show
@page_title = "MTGO Draft Replayer"
end
def search
@page_title = "Search MTGO Draft"
end
def destroy
end
def draft_params
params.require(:draft).permit(:name, :set_1, :set_2, :set3, :file_setter)
end
end
和我的观点:(new.html.erb):
<%= form_for @draft, :multipart => true do |f| %>
<div class="form-group">
Draft Log: <%= f.file_field :file_setter %>
<%= f.submit 'Save' %>
</div>
<% end %>
这是模型(draft.rb)
class Draft < ActiveRecord::Base
def file_setter=(file)
path = file.tempfile.to_path.to_s
lines = File.read(path).split("\r\n")
self.set_1 = lines[12]
self.set_2 = lines[164]
self.set_3 = lines[316]
end
attr_accessor :file_setter
end
如果您需要更多信息或想深入了解整个应用程序,他是gitHub repository。
感谢您的帮助。
这是日志摘录:
Started POST "/drafts" for 127.0.0.1 at 2015-04-10 10:52:57 +0200
Processing by DraftsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"8IjtOXuXm3fswWTslDTq5ijjo0dpCWHlu9X7UFb5prvawrZfkLC46v7PbqTgrSrvukLxAAoBIBftsGqiXv79JA==", "draft"=>{"file_setter"=>#<ActionDispatch::Http::UploadedFile:0x00000005ee4a08 @tempfile=#<Tempfile:/tmp/RackMultipart20150410-3067-1fssm13>, @original_filename="1", @content_type="application/octet-stream", @headers="Content-Disposition: form-data; name=\"draft[file_setter]\"; filename=\"1\"\r\nContent-Type: application/octet-stream\r\n">}, "commit"=>"Save"}
[1m[36m (0.2ms)[0m [1mBEGIN[0m
[1m[35mSQL (1.8ms)[0m INSERT INTO `drafts` (`created_at`, `updated_at`) VALUES ('2015-04-10 08:52:57', '2015-04-10 08:52:57')
[1m[36m (41.6ms)[0m [1mCOMMIT[0m
Redirected to http://localhost:3000/drafts/show
Completed 302 Found in 57ms (ActiveRecord: 43.6ms)
【问题讨论】:
-
你的主要问题是从文本文件中读取内容吗?
-
我的主要问题是读取内容并将其存储在一个变量中(最好是每行一个元素的数组),这样我就可以对其进行格式化,然后将其写入数据库。格式化和写入其次,现在我只想打开文件。
-
path = file.tempfile.to_path.to_s是否为您提供了正确的路径? -
对不起,我不知道如何检查。我想要做的是让用户从他的硬盘输入一个文件,所以这应该是通用的?
-
您可以使用
file.tempfile.read从文件中获取文本内容。之后,您可以通过'\t\n'拆分内容
标签: ruby-on-rails ruby forms