アップロードの処理にcarrierwaveを使用しています。次の方法でstore_dirを指定しました。
def store_dir
"uploads/#{Time.now.year}/#{Time.now.month}/#{Time.now.day}"
end
ファイルのアップロードは魅力のように機能します。ファイルをアップロードするたびに、ファイルは終了するはずのディレクトリに配置されます。すなわち「今日のディレクトリ」。
ファイルをダウンロードしようとすると、carrierwaveはstore_dirオプションに基づいて動的にダウンロードパスを構築しています。したがって、2012年1月12日にアップロードされたファイルがfliesystemの次のパスで利用可能であるとしましょう。
/uploads/2012/12/01/file.ext
Carrierwaveによって次のように取得されます:
/uploads/2012/12/12/file.ext
これは明らかに「ファイルを読み取れません」エラーにつながります。
私は2つの異なる可能な解決策を持ってきました:
- 作成時にファイルへの実際のファイルパスを保存する別のファイルを作成し、この値を使用してファイルを取得します。
- オーバーロードretrieve_from_store!メソッド(carrierwave gemの一部)を作成し、 store_dirからではなく、ファイルレコードのcreated_atフィールドに基づいてパスを構築します。
それほど汚れていないので、2番目の可能性に傾いています。それでも、どちらも「レールウェイではない」と感じています。どちらを使用するのが良いですか、そしてその理由は何ですか?それとも、carrierwaveがこの問題を解決する方法を提供しますか?