私はレールアプリを持っています。サーバーに写真をアップロードするために gem:paperclip を使用しています。私がやろうとしているのは、perams ハッシュからの情報を使用して、サーバー上にフォルダー構造を作成することです。以下のコードを参照してください。
フォトコントローラー.rb
# POST /photos
# POST /photos.json
def create
@photo = Photo.new(params[:photo])
@photo.lat = params["photo%5Blat%5D"].to_s
@photo.lng = params["photo%5Blng%5D"].to_s
@photo.description = params[:description]
@photo.takenby = params[:takenby].to_s
@photo.save
puts "photos/create photos.inspect= #{@photo.inspect}"
end
写真.rb
class Photo < ActiveRecord::Base
attr_accessible :lat, :lng, :image
vendor = params[:description]
owner = params[:owner]
Paperclip.interpolates :prefix do |attachment, style|
"#{owner}/#{Date.today.to_s }/#{vendor}"
end
has_attached_file :image,
:path => ":prefix/:basename.:extension",
:styles => { :thumbnail => "57x57", :original => "100x100" },
:storage => :s3,
:s3_credentials => S3_CREDENTIALS
ただし、サーバー コンソールでこのエラーが発生します。
Started GET "/photos?lat=37.785834&lng=-122.406417" for 127.0.0.1 at 2012-09-26
21:08:57 -0700
21:08:57 web.1 | Processing by PhotosController#index as JSON
21:08:57 web.1 | Parameters: {"lat"=>"37.785834", "lng"=>"-122.406417"}
21:08:57 web.1 | Completed 500 Internal Server Error in 4ms
21:08:57 web.1 | NameError (undefined local variable or method `params' for #<Class:0x007fb7d4fa3320>):
21:08:57 web.1 | app/models/photo.rb:23:in `<class:Photo>'
21:08:57 web.1 | app/models/photo.rb:18:in `<top (required)>'
21:08:57 web.1 | app/controllers/photos_controller.rb:14:in `index'
ペーパークリップが正しいフォルダー構造でサーバーに画像を保存するには、モデルで何を変更する必要がありますか?
これは私の問題を解決しました:
photo.rb
Paperclip.interpolates :prefix do |attachment, style|
"#{attachment.instance.takenby}/#{Date.today.to_s }/#{attachment.instance.description}"
end
しかし、これにより新たな問題が発生しました。異なるサイズの画像を保存することはできなくなりました。それ、どうやったら出来るの?