フォームオブジェクトで複数のPDFアップロードのテストを行っておりますが、エラーが出てしまいます。
カスタムバリデーションを用いており、アプリケーション上ではうまくバリデーションが機能しておりますが、テストになるとcontent_type=nilでエラーとなります。
宜しくお願いします。
エラー文 1) DocumentFolder フォルダー名、タグ、PDFが存在すれば登録できること Failure/Error: if !image.content_type.include?('pdf') NoMethodError: undefined method `content_type' for "%\xBF\xF7\xA2\xFE\n":String => #<DocumentFolder:0x00007f98d4a501a8 @document_tag="cde", @folder_name="abe", @images= #<Rack::Test::UploadedFile:0x00007f98d4a580d8 @content_type=nil, ←なぜ? @original_filename="test1.pdf", @tempfile= #<File:/var/folders/n2/shxvv46j38s2mtrpy4r8qffc0000gn/T/test120201008-1545-1jofsf6.pdf>>, @user_id=1> カスタムバリデーション def images_type_validate if images != nil images.each do |image| if !image.content_type.include?('pdf') errors.add(:images,'で保存してください') end end end end
問題としている部分は、 UploadedFile クラスのインスタンスを想定しているところが String になってしまっている、ということですか? : https://api.rubyonrails.org/v6.0.3.3/classes/ActionDispatch/Http/UploadedFile.html
おっしゃる通りで間違いありません。よくわからない文字列に変換されてしまうようです。いただいたリンクの中のメソッドは初見なのですが、Stringになってしまったパスをパスに戻すものがあるのでしょうか?
バリデーション内のeach文で中身が変わってしまうようです。。。
46: def images_type_validate
47: if images != nil
48: images.each do |image|
=> 49: binding.pry
50: file_name = File.extname(image)
51: if !file_name.include?(".pdf")
52: # !image.content_type.include?('application/pdf')
53: errors.add(:images,'で保存してください')
54: end
55: end
56: end
57: end
[1] pry(#<DocumentFolder>)> image
=> "%PDF-1.5\n"
[2] pry(#<DocumentFolder>)> images
=> #<Rack::Test::UploadedFile:0x00007f9868d9ad70
@content_type=nil,
@original_filename="test1.pdf",
@tempfile=
#<File:/var/folders/n2/shxvv46j38s2mtrpy4r8qffc0000gn/T/test120201008-2893-bmd2gq.pdf>>
[3] pry(#<DocumentFolder>)> File.extname(images)
=> ".pdf"
[4] pry(#<DocumentFolder>)> File.extname(image)
=> ".5\n"
あなたの回答
tips
プレビュー