在此先感谢您的帮助.
我想在我的数据库中设置id3标签数据作为我的模型MasterSong的属性.具体来说,标题,艺术家和专辑.
create_table :master_songs do |t|
t.integer :user_id
t.has_attached_file :m_song
**- t.string :title
- t.string :artist
- t.string :album**
Run Code Online (Sandbox Code Playgroud)
在我的模型中,我使用回调来保存对象(master_song)之前的数据.
before_save :set_id3_tags_in_database
def set_id3_tags_in_database
TagLib::MPEG::File.open(self.m_song.path) do |file|
tag = file.id3v2_tag
tag.title
tag.album
tag.artist
end
self.update_attributes(:title => tag.title,
:artist => tag.artist,
:album => tag.album)
end
Run Code Online (Sandbox Code Playgroud)
我很确定我的语法是问题所在.该对象似乎遇到了错误
undefined method `title' for nil:NilClass with an infinite loop
Run Code Online (Sandbox Code Playgroud)
控制器创建动作是正常的:
def create
@master_song = current_user.master_songs.build(params[:master_song])
respond_to do |format|
if @master_song.save
format.html { redirect_to @master_song, notice: 'Master song was successfullycreated.' }
end
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?更新:def set_id3_tags z = …