この例をファイル アップローダーに使用しています。 ファイルをアップロードする前に、ファイルを開き、特定の単語を検索し、この単語をデータベースの属性に割り当ててから、ファイルをデータベースに保存します。
例:
2 つのファイルを選択し、「アップロード」をクリックします。
ファイル名は、upload_file_name に割り当てられます。
ファイルのサイズは、upload_file_size に割り当てられます。
ファイルを開き、「Bug」または「Lion」という単語を検索します。
「Lion」が見つかった場合、「Lion」を upload_content_type に割り当てる必要があります。「バグ」が見つかった場合は、upload_content_type に「バグ」を割り当てる必要があります。
ファイルを開く関数をどこで定義する必要があるのかよくわかりません: uploads_controller.rbまたはuploads.rbで? そして、upload_content_type に「バグ」を割り当てる方法がわかりません。
それが私のupload.rbです:
class Upload < ActiveRecord::Base
attr_accessible :upload, :upload_file_name, :upload_file_size
Paperclip::interpolates :piks do |attachment, style|
attachment.instance.upload_file_name
end
has_attached_file :upload,
:url =>"/system/Files/Files/:piks/:basename.:extension",
:path =>":rails_root/public/system/Files/Files/:piks/:basename.:extension"
include Rails.application.routes.url_helpers
validates :upload_file_name, :presence => true,
:format =>{:with => %r{\.(txt)$}i,:message =>"should have an extension .cell"}
validates_uniqueness_of :upload_file_name, :message =>"exists already."
def to_jq_upload
{
"name" => (read_attribute(:upload_file_name)).split(".").first,
"size" => read_attribute(:upload_file_size),
"url" => upload.url(:original),
"delete_url" => upload_path(self),
"delete_type" => "DELETE"
}
私のuploads_controller.rb:
def create
p_attr=params[:upload]
p_attr[:upload] = params[:upload][:upload].first if params[:upload][:upload].class == Array
@upload = Upload.new(p_attr)
respond_to do |format|
if @upload.save
format.html {
render :json => [@upload.to_jq_upload].to_json,
:content_type => 'BUUUUU',
:layout => false
}
format.json { render json: [@upload.to_jq_upload].to_json, status: :created, location: @upload }
else
format.html { render action: "new" }
format.json{ render json: {name:(@upload.upload_file_name).split(".").first ,error: @upload.errors.messages[:upload_file_name]}, :status =>422}
end
end
end
データベース:
ActiveRecord::Schema.define(:version => 20120731045929) do
create_table "uploads", :force => true do |t|
t.string "upload_file_name"
t.string "upload_content_type"
t.string "user"
t.integer "upload_file_size"
t.datetime "upload_updated_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
end
ファイルを開く機能:
def check
File.open(??filename) do |file|
file.each do |line|
type=/Lion/.match(line)
if type != nil
puts(type[0]) #assign to a database!!
break
end
end
end
end
前もって感謝します