Se esperaba la imagen (# 70365286921100), se obtuvo el error Array (# 70365535770260)
Frecuentes
Visto 3,279 veces
2
Estoy tratando de crear una aplicación simple de Rails 3.2.
Para mantenerlo simple, la aplicación tiene dos modelos: Producto e Imagen.
El producto debe tener muchas imágenes, así que aquí están mis modelos:
class Product < ActiveRecord::Base
has_many :images, :class_name => 'Image'
end
class Image < ActiveRecord::Base
belongs_to :product
has_attached_file :image, :styles => { :normal => "300x300", :small => "70x70" }
end
Estoy usando active_admin y aquí está mi formulario para crear un producto:
<%= semantic_form_for [:admin, @product], :html => {:multipart => true} do |f| %>
<%= f.inputs :title, :description, :price %>
<%= f.semantic_fields_for :images do |f2| %>
<%= f2.file_field :image %>
<% end %>
<%= f.buttons :commit %>
<% end %>
Cuando envío el formulario, aparece la siguiente excepción:
Image(#70365286921100) expected, got Array(#70365535770260)
{"utf8"=>"✓",
"authenticity_token"=>"waFPhUIJPD90r5SRVmvvYBEcpZHgFJbM325wZDknWf8=",
"product"=>{"title"=>"rfrfrf",
"description"=>"rfrfr",
"price"=>"200.99",
"images"=>{"image"=>#<ActionDispatch::Http::UploadedFile:0x007ffe63d19e58 @original_filename="IMG_0097.JPG",
@content_type="image/jpeg",
@headers="Content-Disposition: form-data; name=\"product[images][image]\"; filename=\"IMG_0097.JPG\"\r\nContent-Type: image/jpeg\r\n",
@tempfile=#<File:/var/folders/_j/s1n6_4551cxc765p1zm8w54r0000gq/T/RackMultipart20120503-2609-bwvbis>>}},
"commit"=>"Create Product"}
¿Por qué está pasando? ¿Por favor, puede alguien ayudarme?
Gracias de antemano!
1 Respuestas
2
Creo que necesitas accepts_nested_attributes_for :images
en su modelo de Producto. El modelo del Producto debería verse así:
class Product < ActiveRecord::Base
has_many :images, :class_name => 'Image'
accepts_nested_attributes_for :images
end
Si observa su hash de parámetros, verá:
"images"=>{"image"=> ...
Lo que accepts_nested_attributes_for
hace es cambiar la estructura de sus params para acomodar la relación de uno a muchos especificada por el has_many :images
asociación.
Suponiendo que tiene más de una imagen en el formulario, su hash de parámetros contendría:
"images_attributes"=>{"0"=>{"image"=> ... }, "1"=>{"image" => ... }, ...}
Además, asegúrese de llamar @product.images.build
en algún lugar antes de llegar a la vista si el @product
es nuevo.
Respondido 17 Abr '14, 18:04
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas ruby-on-rails ruby ruby-on-rails-3.2 or haz tu propia pregunta.