Переименование имени файла после его загрузки - PullRequest
0 голосов
/ 28 декабря 2011

Я хочу загрузить 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

если я сделаю это таким образом, вывод файла будет «просто dance.mp3 (www.hypejamz.com) (www.hypejamz.com)» но я хочу, чтобы результат был «просто dance.mp3 (www.hypejamz.com)». спасибо

Ответы [ 3 ]

2 голосов
/ 28 декабря 2011

Вот и спецификация, которая описывает модификацию строки, о которой вы спрашиваете, и некоторый код, который ее передает.

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 голос
/ 28 декабря 2011

Насколько я понимаю, при использовании интерполяции он добавляет (www.hypejamz.com) к пути или URL-адресу файла, когда вы возвращаетесь к имени файла в базе данных.

Поскольку вы обновляете имя файла с помощью "(www.hypejamz.com)", добавляемого к имени файла в базе данных, при извлечении файла с помощью методов URL или пути скрепки при интерполяции "(www.hypejamz.com)", получите добавляется к имени файла еще раз.

предложение не будет обновлять имя файла в update_attributes

  def normalize_song
    self.update_attributes(:name => "#{self.title} by #{self.user.name}")
  end
0 голосов
/ 30 декабря 2011

Я думаю, это то, что вам нужно. Это небольшой хакерский способ, которым вы можете это сделать.

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)", добавленным в файл.сам и будет восстановлен как то же самое.

...