Papaerclip no funciona con el método de actualización
Frecuentes
Visto 212 veces
2
He Persona modelo:
class Person
include Mongoid::Document
include Mongoid::MultiParameterAttributes
include Mongoid::Paperclip
attr_accessible :photo,:name
has_mongoid_attached_file :photo, :styles => {:thumb => "100x100>" }, default_url: "/images/:style/missing.png"
field :photo
field :name
end
Y en mi acción de actualización of ManagedbController Hago:
def edit
@person=Person.find_by(name: params[:name])
end
def update
@person=Person.find_by(name: params[:name])
@person.update_attributes(photo: params[:photo])
end
editar.html.erb
<h2> Add photo here!</h2>
<%= @person.name %>
<%= form_for @person, url: {controller: :managedb,action: :update}, html: {mulitpart: true} do |f| %>
<p><%= f.hidden_field :name %></p>
<p><%= f.file_field :photo %></p>
<p><%= f.submit :submit , class: "btn btn-large btn-success" %></p>
<% end %>
cuando visito la página de edición obtengo el nombre de la persona de @persona.nombre lo que significa que la variable @person es NO NULO
Pero cuando selecciono una imagen y haga clic en enviar me sale este error en el método de actualización:
Mongoid::Errores::Documento no encontrado
Documento no encontrado para la clase Persona con atributos {:name=>nil}.
At
@person=Person.find_by(name: params[:name])
Parámetros de solicitud
{"utf8"=>"✓", "_method"=>"put", "authenticity_token"=>"jpm+Ljk6rvZP9bIUw2gA9BvfZXsnATzsIpEEJMTbuzY=", "person"=>{"name"=>"child", "photo"=>#<ActionDispatch::Http::UploadedFile:0x007ffa20a05330 @original_filename="deepika-padukone-61a.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"person[photo]\"; filename=\"deepika-padukone-61a.jpg\"\r\nContent-Type: image/jpeg\r\n", @tempfile=#<File:/var/folders/b2/v1ytdy497fj9md28f7pr9wgm0000gn/T/RackMultipart20130911-3884-daf5yu>>}, "commit"=>"submit", "controller"=>"managedb", "action"=>"update"}
Rack session
¿Que esta mal aquí? ¡Ayuda! Estoy usando Mongoid y Rails 3.2.13.
1 Respuestas
1
No da el nombre de la persona en el formulario, así que params[:name]
is nil
. Puede agregar un campo oculto para mantener el nombre (id es mejor) y consígalo en su controlador con params.
Pruebe lo siguiente:
<h2> Add photo here!</h2>
<%= @person.name %>
<%= form_for @person, url: {controller: :managedb,action: :update}, html: {mulitpart: true} do |f| %>
<p><%= f.hidden_field :name %></p>
<p><%= f.file_field :photo %></p>
<p><%= f.submit :submit , class: "btn btn-large btn-success" %></p>
<% end %>
EDITAR
Le sugiero que separe su acción en ManageDbController
: 1 para mostrar el formulario (debe ser edit
) y otro 1 para actualizar tu modelo (update
la acción no cambia).
También puedes instalar estas 2 gemas. better_errors
y binding_of_caller
, pueden ayudarlo a depurar su problema.
Respondido el 12 de Septiembre de 13 a las 15:09
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas ruby-on-rails mongodb mongoid paperclip or haz tu propia pregunta.
ahora esta dando PersonsController constante no inicializado. Revisa mi pregunta, la he actualizado. La acción de actualización está en otro controlador y no hay ningún controlador como Controlador de personas - usuario2675010
mira el Térmica atributo en el html generado y verifique la url. Parece
from_for
no le importa url parámetro - JoJoSNo estoy entendiendo lo que está pasando. Ahora estoy de nuevo recibiendo el Mongoid::Errores::Documento no encontrado!! Sin embargo, el multiparte está funcionando. Actualizada la pregunta. - usuario2675010
hizo el
@person
se actualiza de todos modos? la imagen esta cargada en su sistema de archivos?? - JoJoSHe actualizado mi respuesta;). Si no resuelve su problema, muestre sus rutas por favor. - JoJoS