私はそのように協会を持っています:
ユーザーには多くのアップロードがありますアップロードはユーザーに属し、多くのアップロード画像がありますアップロード画像はアップロードに属します<-孫
そのユーザーにアップロードを追加する前に、ユーザーを作成します。アップロードはその他のタイプのスタンドアロンファイルですが、アップロードをより適切に説明するために、多くのアップロード画像をリンクすることもできます(したがって、個別のアップロード画像モデル)。現在、UploadおよびUpload_Imageの永続性は、ネストされたフォーム属性であるため、ユーザー更新関数で実行されます。
Uploadsには多くのUpload_Imagesが含まれる可能性があるため、Uploadifyを使用して画像を永続化しようとしていますが、残りのparamsハッシュと一緒にUsers更新関数に送信することはできません(以前は、単一のペーパークリップ画像のアップロードが送信されます)。Uploadifyは、Upload_Imageパラメータを別のcreateアクションに送信するように強制します。これは、upload_id外部キーを計算して手動で割り当てることができるため、問題にはなりません。
ただし、問題は、保存を実行すると、自動生成されたフィールド、つまりidとタイムスタンプがnilsのままになることです。これを防ぐにはどうすればよいですか?
これが私のモデルです(簡略化):
User.rb
has_many :uploads, :dependent => :destroy, :order => 'created_at desc'
accepts_nested_attributes_for :uploads, :allow_destroy => true
Upload.rb
belongs_to :user
has_many :upload_images, :dependent => :destroy
accepts_nested_attributes_for :upload_images
has_attached_file :upload, :path => ":rails_root/:class/:id/:basename.:extension", :url => ":rails_root/:class /:id/:basename.:extension"
UploadImage.rb
belongs_to :upload
has_attached_file :image, :styles => {:thumb => "125x125#", :small => "150x150>", :medium => "200x200>", :large => "320x240>"},
:path => ":rails_root/uploads/:upload_id/:class/:id/:style/:basename.:extension",
:url => ":rails_root/uploads/:upload_id/:class/:id/:style/:basename.:extension"
追加
これが私のuploadifyスクリプトです:
<script type="text/javascript" charset="utf-8">
<%- session_key = Rails.application.config.session_options[:key] -%>
$(document).ready(function() {
// Create an empty object to store our custom script data
var uploadify_script_data = {};
// Fetch the CSRF meta tag data
var csrf_token = $('meta[name=csrf-token]').attr('content');
var csrf_param = $('meta[name=csrf-param]').attr('content');
// Now associate the data in the config, encoding the data safely
uploadify_script_data[csrf_token] = encodeURI(encodeURI(csrf_param));
// Now associate the data in the config, encoding the data safely
uploadify_script_data[csrf_token] = encodeURI(csrf_param)
$('.uploadify').uploadify(
{
uploader : '/uploadify/uploadify.swf',
cancelImg : '/uploadify/cancel.png',
multi : true,
auto : true,
script : '/uploads',
onComplete : function(event, queueID, fileObj, response, data)
{
var dat = eval('(' + response + ')');
$.getScript(dat.upload);
},
scriptData :
{
'_http_accept': 'application/javascript',
'format' : 'json',
'_method': 'post',
'<%= session_key %>' : encodeURIComponent('<%= u cookies[session_key] %>'),
'authenticity_token': encodeURIComponent('<%= u form_authenticity_token %>'),
'upload_id' : '<%= Upload.last.id + 1 %>'
}
});
$('#submit').click(function(event){
event.preventDefault();
});
$('#submit').click(function(event){
event.preventDefault();
$('.uploadify').uploadifyUpload();
});
});
</script>
そして、作成アクション:
def create
@upload_image_test = UploadImage.new(:image => params[:Filedata])
@upload_image_test.upload_id = Upload.last.id + 1
end