rails notidentifiedbyimagemagickerror errors active ruby-on-rails ruby image ruby-on-rails-4 paperclip

ruby on rails - notidentifiedbyimagemagickerror - Error de Paperclip: falta el modelo requerido attr_accessor para ''avatar_file_name''



rails gem upload file (3)

Asegúrese de que en paperclip_database: migration utilice el plural para el nuevo nombre de tabla y en el generador de clips que use singular:

rails g paperclip_database:migration cms_article_category cms_article_category_images rails g paperclip cms_article_category cms_article_category_image

Y compruebe los nombres de las columnas resultantes en su base de datos En su ejemplo, la columna en la tabla de avatar debe llamarse avatar_file_name

Entonces quiero usar Paperclip para tener fotos para cada Listado. Agregué el código apropiado a los listados show.html.erb, el modelo listing.rb, los listados_controller.rb y _form.html.erb partial.

Cuando intento subir una imagen para el listado obtengo este error:

Paperclip::Error in ListingsController#update Listing model missing required attr_accessor for ''avatar_file_name''

Línea 44 de listados_controlador:

def update respond_to do |format| if @listing.update(listing_params) format.html { redirect_to @listing, notice: ''Listing was successfully updated.'' } format.json { head :no_content } else

Algunas cosas para probar: es decir, agregar un código al modelo listing.rb para hacer que las imágenes aceptables para: avatar sean más robustas. Esto es lo que mencionaron varias publicaciones de stackoverflow agregando al modelo listing.rb:

validates_attachment_content_type :avatar, :content_type => %w(image/jpeg image/jpg image/png)

Lamentablemente, sigo teniendo el mismo error cuando adjunto una imagen. Cuando no adjunto una imagen, mi imagen predeterminada se carga correctamente y la lista se crea correctamente.

Mi modelo de listado:

class Listing < ActiveRecord::Base has_attached_file :avatar, :styles => { :medium => "150x", :thumb => "100x100>" }, :default_url => "default.jpg" validates_attachment_content_type :avatar, :content_type => %w(image/jpeg image/jpg image/png) end

Mi _form.html.erb parcial:

<%= form_for @listing, :html => { :multipart => true } do |f| %> <% if @listing.errors.any? %> <div id="error_explanation"> <h2><%= pluralize(@listing.errors.count, "error") %> prohibited this listing from being saved:</h2> <ul> <% @listing.errors.full_messages.each do |msg| %> <li><%= msg %></li> <% end %> </ul> </div> <% end %> <div class="form-group"> <%= f.label :name %><br> <%= f.text_field :name, class: "form-control" %> </div> <div class="form-group"> <%= f.label :company %><br> <%= f.text_field :company, class: "form-control" %> </div> <div class="form-group"> <%= f.label :email %><br> <%= f.text_field :email, class: "form-control" %> </div> <div class="form-group"> <%= f.label :phone %><br> <%= f.text_field :phone, class: "form-control" %> </div> <div class="form-group"> <%= f.label :avatar %><br> <%= f.file_field :avatar, class: "form-control" %> </div> <div class="form-group"> <%= f.submit class: "btn btn-primary" %> </div> <% end %>

Mi controlador de listings_controller.rb:

def update respond_to do |format| if @listing.update(listing_params) format.html { redirect_to @listing, notice: ''Listing was successfully updated.'' } format.json { head :no_content } else format.html { render action: ''edit'' } format.json { render json: @listing.errors, status: :unprocessable_entity } end end end ... def listing_params params.require(:listing).permit(:name, :company, :email, :phone, :avatar) end

Y mi archivo schema.rb

ActiveRecord::Schema.define(version: 20140329174335) do create_table "listings", force: true do |t| t.string "name" t.string "company" t.string "email" t.string "phone" t.datetime "created_at" t.datetime "updated_at" end end

EDITAR: Al agregar la salida de la consola después de ejecutar $ rails se genera el clip de lista de papel avatar

(Necesito 10 puntos de reputación para publicar, así que debe conformarse con el enlace http://i.imgur.com/c8KGTa3.png )


Desde el mensaje de error, file_name no está disponible en el modelo al que intenta guardar. Tuve un problema similar y me di cuenta de que olvidé ejecutar la migración de Paperclip:

rails generate paperclip [Model Name] [Attachment] (p. ej., rails g paperclip Images image )

Si eso no funciona, dado que el problema es la columna "nombre_de_archivo", intente agregar eso al modelo (por ejemplo, rails g migration addFilenameToImages file_name:string )

Esto funcionó para mí, ¡así que espero que ayude a algunos de ustedes también!


Supongo que olvidó crear los campos correspondientes para avatar en la tabla de listings .

Le sugiero que genere una migración para agregar avatar a la tabla de listings siguiente manera:

rails generate paperclip listing avatar

Luego ejecute rake db:migrate

ACTUALIZAR

Según tus comentarios y EDIT, tienes un archivo de migración para agregar avatar a la tabla de listings que creaste al ejecutar rails generate paperclip user avatar pero desafortunadamente por alguna razón no está pasando, es decir, no hay avatar specific fields("avatar_file_name", "avatar_content_type", "avatar_file_size" and "avatar_updated_at") en la tabla de listings según su db/schema.rb . Este es un comportamiento muy extraño.

Le sugiero que siga los siguientes pasos mencionados en orden:

Destruye la migración existente, si hay alguna:

rails destroy paperclip listing avatar

Genera una nueva migración:

rails generate paperclip listing avatar

correr

rake db:migrate

ACTUALIZACIÓN 2

Espero que no me hayas votado (pero alguien lo hizo), por lo que me gustaría avisar que se trata de un problema continuo con Paperclip y sugerí una solución en mis comentarios (31 de marzo) como se muestra a continuación:

Quiero que pruebes como gema ''paperclip'',: git => "git: //github.com/thoughtbot/paperclip.git" en Gemfile y luego paquete de instalación. Avísame cuando termines

Aparentemente no fue notado por usted o por alguien que me votó hoy. Además, dijiste No errors as far as I can tell, image here: i.imgur.com/c8KGTa3.png PERO si miras la salida, hay un error que dice claramente:

migration_file_name '': protected methodmigration_file_name'' llamado para PaperclipGenerator: 0x007fb3c6494c20 (NoMethodError)