を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
2つの添付ファイルがあります。
メソッドupload_record
は、レコードをアップロードし、最新のレコードに他のレコードが存在するかどうかをチェックします(最新のレコードは1つのレコードのみで、アーカイブは多数のレコードを持つことができます)。最新のレコードがある場合、または現在のレコードがある場合は、create_archive
というメソッドが呼び出され、最新のレコードをアーカイブレコードに変換し、s3のアーカイブフォルダに保存します。新しくアップロードされたレコードは現在のrecord
になります。
アーカイブのいずれかに「現在の」ボタンをクリックしたときに呼び出される方法change_record
があります。 change_record
メソッドでは、最新のレコードをアーカイブに変換し、クリックしたアーカイブをcreate_archive
とcreate_current
の2つのメソッドを使用して最新のレコードに変換します。
私はS3 に/record/archive/
に保存されますが、私は現在のレコードにアーカイブレコードを変換するときにレコードがで救われていない、それは成功し、それをやっていると私はレコードを参照することができる午前archive_record
に任意のレコードを変換しますS3の/record/latest/
。
この長い問題をお読みいただきありがとうございます。誰かが私を助けることができますか?
、それはによって取得することができますそれは、によって
を行うことができます
、ファイルをアップロードし、それを取得するために、レール自体を使用して優先現在の状態にすると '/ record/archive'には保存されませんが、'/record/latest'に保存されると期待します。これが誤植なのか、問題の説明の始まりなのかはわかりません。 – Shadwell
申し訳ありません...編集済み – user4965201
@ user4965201あなたの投稿をスペル/文法のために編集しました。それはあなたが意図したようにそれはまだ理にかなっていますか? ;) – madcow