我正在使用paperclip来允许用户在我的rails应用程序中上传图像。
我希望在将当前时间附加到文件名之前重命名上传的图像,然后再将其保存到数据库中。
这是我的模特。 “data_file_name”列用于将图像名称存储在“images”表中。
class Image < ActiveRecord::Base
set_table_name "IMAGES"
set_primary_key "id"
before_create : :rename_image_file
def rename_image_file
extension = File.extname(data_file_name).downcase
self.data_file_name.instance_write(:data_file_name, "#{Time.now.to_i.to_s}#{extension}")
end
belongs_to :book,:foreign_key => :book_id
has_attached_file :data, :path => ":rails_root/public/book_images/:book_id/:style/:basename.:extension",
:url => "http://www.test.org/book_test_editors/book_images/:book_id/:style/:basename.:extension",
:styles => {
:thumbnails => ["150x172#",:jpg],
:large => ["100%", :jpg]
}
end
当我尝试上传图片时,收到以下错误消息:
NoMethodError in BooksController#update
undefined method `instance_write' for "DSC02017.JPG":String
任何帮助?
请注意,我使用的是rails 2.3.5
答案 0 :(得分:0)
您可以调整路径以更改文件名,例如
has_attached_file :data, :path => ":rails_root/public/book_images/:book_id/:style/:basename.#{Time.now.to_i}.:extension",