tengo un modelo UserFile
que belongs_to
un Folder
:Validación ignorado cuando se clona un registro recién creado
class UserFile < ActiveRecord::Base
has_attached_file :attachment
belongs_to :folder
validates_attachment_presence :attachment
validates_presence_of :folder_id
def copy(target_folder)
new_file = self.clone
new_file.folder = target_folder
new_file.save!
end
end
La siguiente prueba falla inesperada:
test 'cannot copy a file to anything other than a folder' do
folder = Factory(:folder)
file1 = UserFile.create(:attachment => File.open("#{Rails.root}/test/fixtures/textfile.txt"), :folder => Folder.root)
file2 = UserFile.find(file1)
# Should pass, but fails
assert_raise(ActiveRecord::RecordInvalid) { file1.copy(nil) }
# Same record, but this DOES pass
assert_raise(ActiveRecord::RecordInvalid) { file2.copy(nil) }
assert file1.copy(folder)
end
El validates_presence_of :folder_id
se ignora cuando se utiliza un recién creado objeto, pero cuando hago un ActiveRecord#find
FUNCIONA. Creo que tiene algo que ver con llamar al clone
en el método copy
, pero no puedo resolverlo. ¿Alguien sabe lo que está pasando o cómo hacer que pase la prueba?
'file1' es una instancia de userfile pero para' file2' está utilizando 'UserFile.find (archivo1)', i pensar es 'UserFile.find (file1.id)' – JCorcuera
No importa. Puede usar 'UserFile.find (file1.id)' o 'UserFile.find (file1)'. Es lo mismo. – Mischa
¿Está planteando una excepción por el motivo que usted cree que es? Tal vez, su validación no funciona en ninguno de los casos, pero una validación diferente está fallando en el segundo guardado, ¿quizás debido a un valor duplicado en una columna única? –