Изображения Rails в начальном файле - PullRequest
0 голосов
/ 16 декабря 2018

У меня есть следующий файл семян.Я пытаюсь сохранить информацию в БД, но это приводит к следующей ошибке.Я не знаю, неправильно ли я вызываю загрузку изображения или указываю что-то, чего не существует, но я знаю, что файл, который я пытаюсь загрузить с этим файлом, находится по указанному пути в файле.

historia1 = History.new({
title: "Capitán, el perro que vive junto a la tumba de su dueño",
description: "Desde que Miguel murió, su perro Capitán se siente muy solo. 
    Una de las formas que tiene de expresarlo y estar más cerca del que fue su amo 
    y cuidador es acercándose cada día a la tumba, en la ciudad argentina de Córdoba, 
    y tumbándose encima. Según explicó la esposa de Miguel, el perro fue un regalo para 
    su hijo. Días después de la muerte de Miguel, Capitán desapareció de casa; estuvo 
    durante un tiempo durmiendo en la calle, hasta que le perdieron el rastro. 
    Un día, madre e hijo fueron a visitar la tumba de Miguel y se encontraron allí a Capitán. 
    El perro se nos acercó ladrando, como si llorara, confiesan. 
    Aunque lo llamaron el can permaneció inmóvil, en la tumba. 
    Una semana más tarde volvieron al cementerio y se toparon de nuevo con Capitán. 
    Esta vez regresó con ellos a casa, pero sigue visitando la tumba de Miguel a diario.",
history_status: 'publicada',
user_id: 1,
images_attributes: {  
          picture:File.open('public/images/capitan.jpg'),
          name:"Capitán, el perro que vive junto a la tumba de su dueño"             
     }
})
historia1.save

Ошибка:

rails aborted!
NoMethodError: undefined method `[]' for #<File:public/images/capitan.jpg>
/home/adrian/Documentos/Ucab/Desarrollo/Proyecto/Entrega II/cloancionPrueba/pabigo/db/seeds/history_seed.rb:1:in `<main>'
/home/adrian/Documentos/Ucab/Desarrollo/Proyecto/Entrega II/cloancionPrueba/pabigo/lib/tasks/custom_seed.rake:8:in `block (4 levels) in <main>'
/home/adrian/Documentos/Ucab/Desarrollo/Proyecto/Entrega II/cloancionPrueba/pabigo/bin/rails:9:in `<top (required)>'
/home/adrian/Documentos/Ucab/Desarrollo/Proyecto/Entrega II/cloancionPrueba/pabigo/bin/spring:15:in `<top (required)>'
bin/rails:3:in `load'
bin/rails:3:in `<main>'
Tasks: TOP => db:seed:history_seed
(See full trace by running task with --trace)

Модели

history.rb

class History < ApplicationRecord
   belongs_to :user, optional: true

   has_many :images, as: :imageable, dependent: :destroy do
       def length
         reject(&:marked_for_destruction?).length
       end
   end

   accepts_nested_attributes_for :images, allow_destroy: true

   validates :title, presence: { message: 'El título no puede estar vacío' }
   validates :description, presence: { message: 'La descripción no puede estar vacía' }
   validates :title, length: { in: 5..75,
   too_long: " 50 caracteres es lo maximo permitido",
   too_short: " 5 caracteres es lo minimo permitido" }
   validates :description, length: { in: 5..2000,
      too_long: " 1500 caracteres es lo máximo permitido",
      too_short: " 5 caracteres es lo minimo permitido" }

   def self.search(search)
     if search
       where("title LIKE ?", "%#{search}%")
     elsif search2
       where("created_at LIKE ?", "%#{search}%")
     else
       find(:all)
     end
   end


end

image.rb

class Image < ApplicationRecord
 attr_accessor :validate_picture

 belongs_to :imageable, polymorphic: true, optional: true
 mount_uploader :picture, PictureUploader

 validates :picture, presence: true, if: :validate_picture?

 def validate_picture?
   validate_picture == 'true' || validate_picture == true
 end
end

1 Ответ

0 голосов
/ 17 декабря 2018

Ты супер близко.И ошибка немного бесполезна, потому что она заставляет вас думать, что с файлом изображения что-то не так, но это не так.

когда вы вызываете objects_attributes: (множественное число), а не object_attributes: (единственное) - тогда вам нужно обернуть свой объект в массив, потому что, потенциально, будет / может быть более 1 хеша.Ваше семя должно выглядеть так:

history = History.new(
  title: "Capitán, el perro que vive junto a la tumba de su dueño",
  description: "Desde que Miguel murió, su perro Capitán se siente muy solo. 
    Una de las formas que tiene de expresarlo y estar más cerca del que fue su amo 
    y cuidador es acercándose cada día a la tumba, en la ciudad argentina de Córdoba, 
    y tumbándose encima. Según explicó la esposa de Miguel, el perro fue un regalo para 
    su hijo. Días después de la muerte de Miguel, Capitán desapareció de casa; estuvo 
    durante un tiempo durmiendo en la calle, hasta que le perdieron el rastro. 
    Un día, madre e hijo fueron a visitar la tumba de Miguel y se encontraron allí a Capitán. 
    El perro se nos acercó ladrando, como si llorara, confiesan. 
    Aunque lo llamaron el can permaneció inmóvil, en la tumba. 
    Una semana más tarde volvieron al cementerio y se toparon de nuevo con Capitán. 
    Esta vez regresó con ellos a casa, pero sigue visitando la tumba de Miguel a diario.",
    history_status: 'publicada',
    user_id: 1,
    images_attributes: [{
      picture: File.open('public/images/capitan.jpg'),
      name: "Capitán, el perro que vive junto a la tumba de su dueño"
    }]
)

history.save
...