Se esperaba la imagen (# 70365286921100), se obtuvo el error Array (# 70365535770260)

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!

preguntado el 03 de mayo de 12 a las 18:05

1 Respuestas

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 or haz tu propia pregunta.