2011-04-25 20 views
5

Tengo dos aplicaciones diferentes usando paperclip. En la aplicación que no guardar el archivo adjunto o llame clip, me sale este registro al cargar una aplicaciónPaperclip no se ha llamado al cargar el archivo adjunto, por lo que no se guarda el archivo adjunto. Rails3 + uploadify

started POST "https://stackoverflow.com/users/1/uploads" for 127.0.0.1 at 2011-04-23 13:38:11 +0100 
Processing by UploadsController#create as HTML 
Parameters: {"utf8"=>"✓", "authenticity_token"=>"t2dRIH4FgOPnLRhpDK0x7iIfjB9Xj5rqkJRPCWZvJ14=", "upload"=> {"document"=>#<ActionDispatch::Http::UploadedFile:0x2beeb08 @original_filename="Essay questions have various requirements.doc", @content_type="application/msword", @headers="Content-Disposition: form-data; name=\"upload[document]\"; filename=\"Essay questions have various requirements.doc\"\r\nContent-Type: application/msword\r\n", @tempfile=#<File:C:/DOCUME~1/Ed/LOCALS~1/Temp/RackMultipart20110423-3980-ycq74p>>}, "commit"=>"Upload", "user_id"=>"1"} 
[1m[35mUser Load (0.0ms)[0m SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1 
[1m[36mUpload Load (0.0ms)[0m [1mSELECT "uploads".* FROM "uploads" WHERE ("uploads".uploadable_id = 1 AND "uploads".uploadable_type = 'User')[0m 
Rendered uploads/_uploadify.html.erb (15.6ms) 
Rendered uploads/_form.html.erb (31.2ms) 
Rendered uploads/new.html.erb within layouts/application (46.9ms) 
Completed 200 OK in 500ms (Views: 234.4ms | ActiveRecord: 0.0ms) 

en la aplicación donde un clip funciona bien, me sale este registro:

Started POST "/uploads" for 127.0.0.1 at Mon Apr 25 11:35:50 +0100 2011 
Processing by UploadsController#create as JSON 
Parameters: {"_http_accept"=>"application/javascript", "Filename"=>"angels.txt", "folder"=>"https://stackoverflow.com/users/", "authenticity_token"=>"NVJj3ODIGuoc97wGvjWkez1YoN+SUDVtNJ+k80XdYXM=", "Upload"=>"Submit Query", "user_id"=>"1", "_uploadify_session"=>"BAh7ByIQX2NzcmZfdG9rZW4iMU5WSmozT0RJR3VvYzk3d0d2aldrZXoxWW9OK1NVRFZ0TkorazgwWGRZWE09Ig9zZXNzaW9uX2lkIiU0ZDEyNzZkNzczNzk1MDdiMmQ4NWZmYTY5MDY4YTU0MQ==--7eb8c0ca249e2566998a0e68322a89d731fdb4ad", "Filedata"=>#<ActionDispatch::Http::UploadedFile:0x4958490 @content_type="application/octet-stream", @original_filename="angels.txt", @tempfile=#<File:C:/DOCUME~1/Ed/LOCALS~1/Temp/RackMultipart20110425-4884-vyvdo8-0>, @headers="Content-Disposition: form-data; name=\"Filedata\"; filename=\"angels.txt\"\r\nContent-Type: application/octet-stream\r\n">} 
[paperclip] identify -format %wx%h "C:/DOCUME~1/Ed/LOCALS~1 /Temp/stream20110425-4884-15he32x-0.txt[0]" 2>NUL 
[paperclip] convert "C:/DOCUME~1/Ed/LOCALS~1/Temp/stream20110425-4884-15he32x-0.txt[0]" -resize "300x300>" "C:/DOCUME~1/Ed/LOCALS~1/Temp/stream20110425-4884-15he32x-020110425-4884-r65fe6-0" 2>NUL 
[paperclip] identify -format %wx%h "C:/DOCUME~1/Ed/LOCALS~1/Temp/stream20110425-4884-15he32x-0.txt[0]" 2>NUL 
[paperclip] convert "C:/DOCUME~1/Ed/LOCALS~1/Temp/stream20110425-4884-15he32x-0.txt[0]" -resize "100x100>" "C:/DOCUME~1/Ed/LOCALS~1/Temp/stream20110425-4884-15he32x-020110425-4884-1ttxfol-0" 2>NUL 
[1m[36mAREL (15.6ms)[0m [1mINSERT INTO "uploads" ("user_id", "created_at", "photo_file_size", "photo_updated_at", "photo_content_type", "photo_file_name", "updated_at") VALUES (1, '2011-04-25 10:36:10.312500', 867, '2011-04-25 10:35:52.109375', 'text/plain', 'angels.txt', '2011-04-25 10:36:10.312500')[0m 
[paperclip] Saving attachments. 
[paperclip] saving C:/rails_project1/Uploadify-2/public/system/photos/2/medium/angels.txt 
[paperclip] saving C:/rails_project1/Uploadify-2/public/system/photos/2/thumb/angels.txt 
[paperclip] saving C:/rails_project1/Uploadify-2/public/system/photos/2/original/angels.txt 
Completed 200 OK in 19422ms (Views: 62.5ms | ActiveRecord: 15.6ms) 

El único diferencia entre los dos es que el uno no de trabajo es modelo polimórfico y el controlador para el modelo polimórfico es el siguiente:

class UploadsController < ApplicationController 
    before_filter :find_parent 
    before_filter :prepare_input_params 
    #respond_to :html, :json, :js 

    def index 
    @uploads = Upload.all 
#@uploads = @parent.try(:uploads).try(:all) 
@upload = Upload.new 
    #respond_with([@parent, @uploads]) 
    end 

    def new 
    @upload = @parent.uploads.new 
    end 

    def create 
    @upload = @parent.uploads.build(params[:upload]) 
    if @upload.save 
     flash[:notice] = "sucessfully saved upload"  
    respond_to do |format| 
     format.html {redirect_to [@parent, :uploads]} 
     format.json {render :json => { :result => 'success', :upload => polymorphic_url([@parent,:uploads]) } } 
     end 
    else 
     render :action => 'new' 
     end 
end 

def edit 
    @upload = Upload.find(params[:id]) 
end 

def show 
    "puts @upload.inspect" 
    @upload = @parent.uploads.find(params[:id]) 
    @total_uploads = @parent.uploads.find(:all, :conditions => { :user_id => @upload.user.id}) 
end 

def update 
    @upload = Upload.find(params[:id]) 
    if @upload.update_attributes(params[:upload]) 
    flash[:notice] = "Successfully updated document" 
    redirect_to @upload 
    else 
    render :action => 'edit' 
    end 
end 

def destroy 
    @upload = Upload.find(params[:id]) 
    @upload.destroy 
    redirect_to([@parent, :upload]) 
end 

private 
def prepare_input_params 
    params[:upload][:document] = params[:Filedata] if params[:Filedata] 
end 

extremo

Aquí está el archivo gist con el bit de forma parcial y uploadify: https://gist.github.com/940960. El formulario tiene: html => {: multipart => true}.

Gracias por la ayuda.

EDITAR:

Parece que el problema es del modelo, uploads.rb. Cuando comento la siguiente sección: todo funciona, pero necesito poder usar validaciones y especificar ruta porque quiero usar S3. Cualquier ayuda sobre cómo puedo descomentar el código sin el error inicial de paperclip que no guardan el evento nuevo.

class Upload < ActiveRecord::Base 
attr_accessible :document 
belongs_to :uploadable, :polymorphic => true 
has_attached_file :document, :styles => { :small => "150x150>",:thumb => "100x100>" } 
=begin     
      :url => "/uploads/:id/:style/:basename.:extension", 
      :path => ":rails.root/public/:uploads/:id/:style/:basement.:extension"         
validates_attachment_presence :document 
validates_attachment_size :document, :less_than => 5.megabytes 
validates_attachment_content_type :document, :content_type => ['application/octet-stream','image/jpeg','image/gif', 'image/png', 'image/pdf', 'image/doc', 
                  'video/x-m4v', 'video/quicktime','application/x-shockwave-flash', 'audio/mpeg', 'video/mpeg', 'application/pdf','application/msword'] 

=end 

final

actualización:

creo que el principal problema parece ser que la razón por la fijación de un nuevo archivo, clips, de alguna manera empieza a llamar seleccione "archivos" * "de". carga " en lugar de llamar al INSERT INTO 'uploads', es decir controller # create action que se muestra más arriba parece llamar a SELECT, cada vez que proporciono: url y : opciones de ruta a paperclip método has_attached_file. Consulte el registro a continuación:

Processing by UploadsController#create as HTML 
Parameters: {"utf8"=>"✓", "authenticity_token"=>"Azxzi09R7NU7+jxj+lxHFGfs+qw7D6b7yRKegRjRQMc=", "upload"=> {"document"=>#<ActionDispatch::Http::UploadedFile:0x2994ff0 @original_filename="al night verses.txt", @content_type="text/plain", @headers="Content-Disposition: form-data; name=\"upload[document]\"; filename=\"al night verses.txt\"\r\nContent-Type: text/plain\r\n", @tempfile=#<File:C:/DOCUME~1/Ed/LOCALS~1 /Temp/RackMultipart20110505-3444-1rlpnr>>}, "commit"=>"Upload", "user_id"=>"1"} 
[1m[35mUser Load (0.0ms)[0m SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1 
[paperclip] C:\ImageMagick-6.6.3-Q16/identify -format %wx%h "C:/DOCUME~1/Ed/LOCALS~1 /Temp/stream20110505-3444-1cpnf87.txt[0]" 
[paperclip] C:\ImageMagick-6.6.3-Q16/convert "C:/DOCUME~1/Ed/LOCALS~1 /Temp/stream20110505-3444-1cpnf87.txt[0]" -resize "150x150>" "C:/DOCUME~1/Ed/LOCALS~1 /Temp/stream20110505-3444-1cpnf8720110505-3444-1vnp5jx" 
[paperclip] C:\ImageMagick-6.6.3-Q16/identify -format %wx%h "C:/DOCUME~1/Ed/LOCALS~1 /Temp/stream20110505-3444-1cpnf87.txt[0]" 
[paperclip] C:\ImageMagick-6.6.3-Q16/convert "C:/DOCUME~1/Ed/LOCALS~1 /Temp/stream20110505-3444-1cpnf87.txt[0]" -resize "100x100>" "C:/DOCUME~1/Ed/LOCALS~1 /Temp/stream20110505-3444-1cpnf8720110505-3444-1vyk9i" 
[1m[36mUpload Load (0.0ms)[0m [1mSELECT "uploads".* FROM "uploads" WHERE ("uploads".uploadable_id = 1 AND "uploads".uploadable_type = 'User')[0m 
Rendered uploads/_uploadify.html.erb (15.6ms) 
Rendered uploads/_form.html.erb (31.2ms) 
Rendered uploads/new.html.erb within layouts/application (62.5ms) 

@ Sobre la base de la solicitud del CharlieMezak, aquí está el punto de vista/uploads/_form.html.erb:

<%= debug @parent %> 
<%= render :partial => "uploads/uploadify" %> 
</br> 
<%= form_for [parent, upload], :html => { :multipart => true } do |f| %> 
<div class="field"> 
<%= f.label :document %><br /> 
<%= f.file_field :document %> 
</div> 

<div class="actions"> 
<%= f.submit "Upload"%> 
</div> 

vistas/uploads/new.html .erb:

<%= render 'form', :parent => @parent, :upload => @upload %> 

vistas/usuarios/index. html.erb:

<%= render "uploads/form", :parent => user, :upload => user.uploads.new %> 

más Actualizar:

como he mencionado, cuando comento a cabo las : estilos,:: url y: ruta opciones de clips y grapas ** 'has_many_attachment: documento', se llama a la instrucción INSERT y aunque guarda el archivo, en lugar de mostrar el archivo adjunto, termina mostrando varios parámetros como tokens de autenticidad, etc. en el sitio web como se muestra a continuación:

attributes: 
id: 1 
email: [email protected] 
encrypted_password: $2a$10$HiksbkRXDtcXiJyUIRj 
password_salt: $2a$10$HiksbkRXD 
reset_password_token: !!null 
remember_token: !!null 
remember_created_at: !!null 
sign_in_count: 3 
current_sign_in_at: '2011-04-25 18:57:27.078125' 
last_sign_in_at: '2011-04-25 09:25:31.406250' 
current_sign_in_ip: 127.0.0.1 
last_sign_in_ip: 127.0.0.1 
created_at: '2011-04-09 17:46:15.546875' 
updated_at: '2011-04-25 18:57:27.078125' 
changed_attributes: {} 
previously_changed: {} 
attributes_cache: {} 
marked_for_destruction: false 
destroyed: false 
readonly: false 
new_record: false 
+0

Podemos ver realmente el código del formulario? – CharlieMezak

+0

¿La instrucción 'SELECT' no está ahí para capturar información del usuario para verificar el token de autenticación? –

+0

@CharlieMezak, Gracias por hacer una recompensa por esta pregunta. El formulario parcial y otros archivos de vista están adjuntos. – brg

Respuesta

1

¿Recordó agregar :multipart => true a la etiqueta del formulario en su vista?

+0

gracias, pero sí agregue: multipart => fiel al formulario. – brg

+1

ja, iba a sugerir lo mismo. ¡ese me ha conseguido más de una vez! –

0

Intente agregar: document_file_name a la llamada attr_accessible.

+0

gracias pero después de agregar: document_file_name a la llamada attr_accessible, aún no funcionará correctamente a menos que comente la sección 'has_attached_file: document' y las validaciones. – brg

+0

Bueno, solo una idea. Antes tenía un error difícil cuando no tenía: document como attr_accessible. –

+0

gracias todo lo mismo. – brg

0

Una cosa que noté es que hay un error tipográfico en la línea 17 de uploadify en tu esencia. Tienes dat.upload, probablemente debería ser data.upload?

Además, ¿ha intentado descomentar las validaciones de a una por vez? Déjame saber lo que pasa. He tenido mi parte justa de batallas contra Paperclip.

+0

gracias por las sugerencias. He corregido la ortografía y comprobé las validaciones que ahora parecen correctas, pero los archivos adjuntos aún no funcionarán si 'has_attached_file: document' tiene alguna opción. Adicional, veo dos errores de enrutamiento. Una es cuando Paperclip llama 'SELECCIONAR' en lugar de 'INSERTAR' y en segundo lugar cuando llamo a localhost: 3000/usuarios/1/carga, en su lugar llama a uploads/index.html.erb. Gracias de nuevo – brg

0

Estoy haciendo exactamente lo mismo que usted, pero usando la gema aws-s3 para ayudarme a subir a S3 a través de un clip. Esto es lo que hay en mi modelo:

has_attached_file :image, 
       :storage => :s3, 
       :s3_credentials => "#{Rails.root.to_s}/config/s3.yml", 
       :bucket => "your_s3_bucket_name", 
       :path => ":attachment/:id/:style/:filename" 

Y tengo esto en mi Gemfile:

gem "paperclip", "~> 2.3" 

gem "aws-s3" 

Y en mi mesa grupos:

t.string "image_file_name" 
t.string "image_content_type" 
t.integer "image_file_size" 
t.datetime "image_updated_at" 
+0

gracias. ¿Está sugiriendo usinh ** has_attached_file: document '. Ejecuté ** carriles generar documento de carga de clip de papel ** en lugar de ** rieles generar imagen de carga de clip de papel **. ¿Crees que ** document ** es una palabra reservada en los rieles? Gracias de nuevo. – brg

Cuestiones relacionadas