我想使用paperclip上传一个mp3文件,我想在上传后在文件上添加一个扩展名,就像这首歌的名字是“just dance.mp3”,我想把它重命名为“just dance.mp3” (www.hypejamz.com)“我的歌曲模型中有这段代码
after_create :normalize_song
Paperclip.interpolates :normalized_mp3_file_name do |attachment, style|
attachment.instance.normalized_mp3_file_name
end
def normalized_mp3_file_name
"#{self.mp3_file_name.gsub( /[^a-zA-Z0-9_\.]/, ' ')}#{'(www.hypejamz.com)'}"
end
def normalize_song
self.update_attributes(:mp3_file_name => normalized_mp3_file_name, :name => "#{self.title} by #{self.user.name}")
end
如果我这样做,文件输出是“just dance.mp3(www.hypejamz.com)(www.hypejamz.com)” 但我希望输出“只是dance.mp3(www.hypejamz.com)”。谢谢
答案 0 :(得分:2)
以下是一个涵盖您所询问的字符串修改的规范,以及一些使其通过的代码。
require 'rspec'
class SongUpload
attr_accessor :file_name
def initialize(file_name)
@file_name = file_name
end
def normalized_mp3_file_name
@file_name + "(www.hypejamz.com)"
end
end
describe SongUpload do
before(:each) do
@upload = SongUpload.new("just dance.mp3")
end
context "#normalized_mp3_file_name" do
it "should append the string (www.hypejamz.com) to the file_name" do
@upload.normalized_mp3_file_name.should eq "just dance.mp3(www.hypejamz.com)"
end
end
end
我几乎肯定这不是你想要的,但它提供了一个基础。
答案 1 :(得分:1)
根据我的理解,当您使用插值时,当您在数据库中检索文件名时,它会将(www.hypejamz.com)附加到文件的路径或URL。
当您使用“(www.hypejamz.com)”附加到数据库中的文件名时更新文件名,同时在插入“(www.hypejamz.com)”时使用url或paperclip的路径方法检索文件再次附加到文件名。
建议不要更新update_attributes中的file_name
def normalize_song
self.update_attributes(:name => "#{self.title} by #{self.user.name}")
end
答案 2 :(得分:0)
我想这就是你所需要的,这是一种你可以做到的一种小小的hackish方式。
before_save :change_mp3_file_name
def change_mp3_file_name
if !self.mp3_file_name.nil?
self.mp3.instance_write(:file_name, "#{self.mp3_file_name}(www.hypejamz.com)")
end
end
这将保存文件名,并将“(www.hypejamz.com)”附加到文件本身,并将以相同的方式检索。