Paperclip如何更改basename(文件名)?

Rai*_*ner 9 ruby ruby-on-rails paperclip ruby-on-rails-3

我想更改照片的基名(filename):

在我的模型中,我有:

  attr_accessor :image_url, :basename

  has_attached_file :image,
          :styles => { :original => ["300x250>", :png], :small => ["165x138>", :png] },
          :url  => "/images/lille/:style/:id/:basename.:extension",
          :path => ":rails_root/public/images/lille/:style/:id/:basename.:extension"
before_save :basename
private

  def basename
  self.basename = "HALLLO"
  end
Run Code Online (Sandbox Code Playgroud)

但文件名根本没有改变.

Arn*_*Roa 6

如果您直接分配文件,则可以执行以下操作:

photo.image = the_file
photo.image.instance_write(:file_name, "the_desired_filename.png")
photo.save
Run Code Online (Sandbox Code Playgroud)


Der*_*don 3

我这样做是为了去除空格:

before_post_process :transliterate_file_name

private
def transliterate_file_name
  self.instance_variable_get(:@_paperclip_attachments).keys.each do |attachment|
    attachment_file_name = (attachment.to_s + '_file_name').to_sym
    if self.send(attachment_file_name)
      self.send(attachment).instance_write(:file_name, self.send(attachment_file_name).gsub(/ /,'_'))
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

我希望这能帮到您。

编辑:

在你的例子中:

def basename
  self.image_file_name = "foobar"
end
Run Code Online (Sandbox Code Playgroud)

应该做这项工作。(但可能会重命名该方法;))