Mam modelu rekordu i kontrolera:Ruby on Rails problemu ze spinacza podczas przesyłania do 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
Istnieją dwa załączone pliki: najnowszy rekord i archiwum.
Metoda upload_record
powoduje przesłanie rekordu i sprawdzenie, czy w ostatnim rekordzie znajduje się jakikolwiek inny rekord (ostatni rekord może być tylko jeden, a archiwum może mieć wiele). Jeśli istnieje najnowszy rekord lub możemy powiedzieć, czy jest obecny rekord, wywoływana jest metoda create_archive
, która konwertuje najnowszy rekord do rekordu archiwum i zapisuje go w folderze archiwum w s3. Nowo przesłany rekord staje się bieżącym numerem record
.
Istnieje metoda change_record
, która jest wywoływana po kliknięciu przycisku "Wykonaj bieżący" w dowolnym z archiwów. W metodzie change_record
przekształcam najnowszy rekord w archiwum i kliknę archiwum w najnowszy rekord przy użyciu dwóch metod: create_archive
i create_current
.
Kiedy przekonwertować dowolny rekord do archive_record
jest z powodzeniem robi to i jestem w stanie widzieć rekord zostanie zapisany w /record/archive/
w S3 ale kiedy konwertować rekord archiwum do bieżącego rekordu rekord nie jest uzyskiwanie zapisane w /record/latest/
w S3.
Dziękuję za przeczytanie tego długiego problemu. Czy ktoś może mi pomóc?
Mówisz, że to nie zapisywane w '/ record/archive', gdy je wprowadzisz, ale możesz oczekiwać, że zostanie zapisane w'/record/latest'. Nie jestem pewien, czy to literówka, czy początki wyjaśnienia problemu. – Shadwell
Przepraszam ... edytowałem – user4965201
@ user4965201 Edytowałem twój wpis pod względem pisowni/gramatyki. Czy możesz jeszcze raz sprawdzić, czy nadal ma to sens, tak jak zamierzałeś? ;) – madcow