0

私はそのように協会を持っています:

ユーザーには多くのアップロードがありますアップロードはユーザーに属し、多くのアップロード画像がありますアップロード画像はアップロードに属します<-孫

そのユーザーにアップロードを追加する前に、ユーザーを作成します。アップロードはその他のタイプのスタンドアロンファイルですが、アップロードをより適切に説明するために、多くのアップロード画像をリンクすることもできます(したがって、個別のアップロード画像モデル)。現在、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
4

1 に答える 1

0

これは何よりも設計上の問題でした。基本的に、私は親の前に子オブジェクトを作成しようとしていたので、このフォームを親の作成後に行われる別のページに移動する必要がありました。

于 2012-07-09T16:45:20.300 に答える