Ich habe einen Rekord Modell und Controller:Ruby on Rails Problem mit Paperclip beim Hochladen s3
require 'open-uri'
class Record < ActiveRecord::Base
has_attached_file :record,
:s3_protocol => :https,
:url => ':s3_domain_url',
:path => '/record/latest/:basename.:extension'
has_attached_file :archive_record,
:s3_protocol => :https,
:url => ':s3_domain_url',
:path => '/record/archive/:basename.:extension'
end
class RecordsController < ApplicationController
def upload_record
@error = nil
previous_record = Record.where(:is_archive => false).first
@new_record = Record.new(record_params)
if @new_record.save
unless previous_record.blank?
if create_archive(previous_record)
previous_record.destroy
end
end
@success = I18n.t('record.success.record_uploaded')
else
@error = find_error(@new_record)
end
respond_to do |format|
format.js {
render :layout => false
}
end
end
def change_record
previous_record = Record.where(:is_archive => false).first
archive_record = Record.where(:id => params[:id]).first
if create_archive(previous_record) && create_current(archive_record)
previous_record.destroy
archive_record.destroy
end
end
private
def record_params
params.require(:record).permit(:record_type, :record, :version, :release_date)
end
def create_archive(previous_record)
archive = Record.new
archive.archive_record = URI.parse(previous_record.record.url)
archive.version = previous_record.version
archive.record_file_name = previous_record.record_file_name
archive.record_content_type = previous_record.record_content_type
archive.is_archive = true
@archive_record_remote_url = previous_record.record.url
archive.save(:validate => false)
end
def create_current(archive_record)
latest = Record.new
latest.record = URI.parse(archive_record.archive_record.url)
latest.version = archive_record.version
latest.record_file_name = archive_record.record_file_name
latest.record_content_type = archive_record.record_content_type
latest.is_archive = false
@archive_record_remote_url = archive_record.archive_record.url
latest.save(:validate => false)
end
end
Es gibt zwei angehängte Dateien: die neueste Aufzeichnung und das Archiv.
Die Methode upload_record
lädt einen Datensatz hoch und überprüft, ob im letzten Datensatz ein anderer Datensatz vorhanden ist (letzter Datensatz kann nur einen Datensatz enthalten und das Archiv kann viele enthalten). Wenn zuletzt ein Datensatz vorhanden ist oder wenn ein aktueller Datensatz vorhanden ist, wird die Methode create_archive
aufgerufen, die den letzten Datensatz in einen Archivdatensatz konvertiert und ihn in den Archivordner in S3 speichert. Der neu hochgeladene Datensatz wird zum aktuellen record
.
Es gibt ein Verfahren change_record
, die aufgerufen wird, wenn eine ‚macht Strom‘ Taste auf einen des Archivs angeklickt wird. In der change_record
Methode wende ich den neuesten Datensatz in ein Archiv und das angeklickte Archiv in den neuesten Datensatz mit den beiden Methoden create_archive
und create_current
.
Wenn ich wandeln jeden Datensatz zu einem archive_record
es erfolgreich, es zu tun ist, und ich bin in der Lage der Lage, die Aufzeichnung zu sehen ist, in /record/archive/
in S3 gespeichert aber wenn ich das Archiv Datensatz zu aktuellen Datensatz konvertiert der Datensatz nicht gespeichert zu werden in /record/latest/
in S3.
Vielen Dank für dieses lange Problem zu lesen. Kann mir jemand helfen?
Sie sagen, es ist nicht gespeichert in '/ record/archive', wenn Sie es aktuell machen, aber Sie würden erwarten, dass es in'/record/latest' gespeichert wird. Nicht sicher, ob dies ein Tippfehler oder der Beginn der Erklärung des Problems ist. – Shadwell
Es tut mir leid ... bearbeitet – user4965201
@ user4965201 ich Ihren Beitrag für Rechtschreibung/Grammatik bearbeitet. Könnten Sie noch einmal überprüfen, dass es immer noch Sinn macht, wie Sie es sich vorgestellt haben? ;) – madcow