0

ユーザーがレールアプリケーションに画像をアップロードできるように、ペーパークリップを使用しています。

データベースに保存する前に、ファイル名に現在の時刻を追加してアップロードした画像の名前を変更したいと考えています。

これが私のモデルです。列「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を使用していることに注意してください

4

1 に答える 1

0

パスを調整してファイル名を変更できます。

  has_attached_file :data, :path => ":rails_root/public/book_images/:book_id/:style/:basename.#{Time.now.to_i}.:extension",
于 2013-05-09T16:26:14.157 に答える