mp3 ファイルと pdf ファイルを添付するために、Rails 4.0.0 と Paperclip 4.1.1 を使用しています。カピバラとのRspecで統合テストを書いています。
両方のタイプのファイルに対して、コンテンツ タイプとファイル名の検証を実施しています。
class Song < ActiveRecord::Base
validates :title, presence: true
validates :writeup, presence: true
has_attached_file :mp3
validates_attachment :mp3,
:content_type => { :content_type => "audio/mp3" },
:file_name => { :matches => [/mp3\Z/] }
has_attached_file :chords
validates_attachment :chords,
:content_type => { :content_type => 'application/pdf' },
:file_name => { :matches => [/pdf\Z/] }
end
これを統合テストで使用して、有効な曲の属性を入力します。
def fill_in_valid_song
fill_in("Title", with: "Valid Song")
fill_in("Writeup", with: "Description of song")
attach_file("Mp3", File.join(Rails.root, "/spec/factories/Amazing_Grace.mp3" ))
attach_file("Chords", File.join(Rails.root, "/spec/factories/FakeChordChart.pdf" ))
end
有効な曲を作成するための統合テストを実行すると、pdf ファイルは受け入れられますが、mp3 ファイルはコンテンツ タイプの検証に失敗します。
ブラウザで同じ手順を実行すると、曲はエラーなしで正常にアップロードされます。モデル スペックも同じファイルを使用して合格します。
ファイルを添付するときの「Mp3」の大文字「M」に問題があるのではないかと思いましたが、これは添付ファイルがどのファイル フィールドに含まれるかを指定するためのものです。小文字の「m」に変えてみたところ、カピバラがフィールドを見つけられないというエラーに変わりました。