这是我在 stackoverflow 上的第一篇文章。我正在开发一个 Rails 应用程序,它需要一个带有回形针附加的 .ogg 音频文件的歌曲模型。由于某些浏览器的音频格式限制,我正在使用 .ogg 格式。
不幸的是,在创建新歌曲对象时,似乎所有格式验证都失败了,从而阻止了音频文件的上传。
我尝试了几种格式描述,例如'audio/ogg'、'audio,oga'、video/ogg'......但似乎没有一个有效。上传 .mp3 文件可以正常工作,但由于上述原因,我需要使用 .ogg。
我使用回形针在应用程序的其他模型中上传图像文件,它工作正常,所以我似乎遗漏了一些东西......提前感谢您的所有帮助!
模型,song.rb:
class Song < ActiveRecord::Base
attr_accessible :name, :lyrics, :track_order, :music_file, :url
has_attached_file :music_file, dependent: :destroy
validates_presence_of :name, :lyrics, :track_order, :record_id
validates_attachment_presence :music_file
validates_attachment_content_type :music_file, :content_type => ['audio/ogg', 'video/ogg']
belongs_to :record
default_scope order('track_order ASC')
before_validation :set_file_url
private
def set_file_url
self.url = music_file.url
end
end
我得到的错误:
ArgumentError (uncaught throw #<ActiveModel::Errors:0x0000000560df60 @base=#<Song id: 12, name: "Las Horas", lyrics: "Letra aquí", track_order: 1, record_id: 2, created_at: "2014-09-30 14:06:05", updated_at: "2014-09-30 15:27:25", music_file_file_name: "lshoras.ogg", music_file_content_type: "video/ogg", music_file_file_size: 3220214, music_file_updated_at: "2014-10-01 08:59:56", url: "/system/songs/music_files/000/000/012/original/lsho...">, @messages={:music_file=>["has an extension that does not match its contents"], :name=>[], :lyrics=>[], :track_order=>[]}>):
app/controllers/songs_controller.rb:33:in `throw'
app/controllers/songs_controller.rb:33:in `update'