【发布时间】:2015-12-15 11:21:35
【问题描述】:
我有一个记录模型和控制器:
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
有两个附件:最新记录和存档。
upload_record 方法上传一条记录并检查最新记录中是否存在任何其他记录(最新记录只能是一条记录,存档可以有许多条记录)。当 latest 中存在现有记录或者我们可以说是否存在当前记录时,调用 create_archive 方法将最新记录转换为存档记录并将其保存到 s3 的存档文件夹中。新上传的记录成为当前的record。
有一个方法change_record,当点击任何档案上的“设为当前”按钮时调用该方法。在change_record 方法中,我使用create_archive 和create_current 两种方法将最新记录转为存档,并将点击的存档转为最新记录。
当我将任何记录转换为 archive_record 时,它已成功完成,我能够看到记录保存在 S3 中的 /record/archive/
但是当我将存档记录转换为当前记录时,该记录没有保存在 S3 中的/record/latest/ 中。
感谢您阅读这个冗长的问题。有人可以帮帮我吗?
【问题讨论】:
-
您说它没有保存在
/record/archive中,但您希望它保存在/record/latest中。不确定这是错字还是问题解释的开始。 -
对不起...已编辑
-
@user4965201 我编辑了你的拼写/语法帖子。您能否像您预期的那样仔细检查它是否仍然有意义? ;)
-
首先,我不明白您为什么要使用 URI.parse,如果您正在解析它,那么您不必分配回形针默认变量。好像你想转储以前的文件?我说的对吗?
-
latest.record = archive_record.archive_record...这样就可以了
标签: ruby-on-rails ruby-on-rails-4 amazon-s3 paperclip