2011-12-11 14 views
1

CarrierWaveを使ってファイルをアップロードする方法を知りました。私はそれらのファイルをテキストエリアに読み込んで編集する方法を理解しました。私の質問は:Ruby on RailsのCarrierWaveファイル(テキスト)の更新

テキストエリアで編集したCarrierWaveファイルはどのように更新すればよいですか?私は同じとルビーのファイルを作成することによって、これを考え出し

@user = User.find params[:id] 
File.open(@user.avatar.current_path, 'r+') do |f| 
    f.print params[:user][:avatar_textarea] 
    f.truncate f.pos 
end 

答えて

3

ローカルディスク上にして、コントローラのアクションで、その後

class User < ActiveRecord::Base 
    mount_uploader :avatar, AvatarUploader 
end 

を次のようにあなたの設定であることを保存すると仮定すると、 filenameは更新されるファイルとして指定します。次に、このファイルにテキストエリアの内容を入力しました。次に、更新されたファイルに対してupdate_attributesを呼び出し、その:file属性を作成したばかりのファイルに指定しました。属性を更新した後、私は作成したファイルを削除します。

私はこれをTempfileを使って試しましたが、希望のファイル名を維持する方法を見つけられませんでした。

+0

私はまだこのオプションを試していません。しかし、私はあなたにお返しします。私は考え出した解決策を投稿するつもりです。 – groffcole

+0

この方法はうまくいきます。 1つの問題:ファイルをアップロードしてから、開発サーバーを起動して後で戻ってきた場合、以前にアップロードされたファイルは更新されません。なぜこれができますか? – groffcole

+0

問題が見つかりました。 ajax呼び出しがファイルをキャッシュしていました。すべてがうまく保存されましたが、ブラウザはキャッシュされた古いバージョンをロードしていました。私はこのようにキャッシュしました: '$(document).ready(function(){ $ .ajaxSetup {{cache:false}); – groffcole

1

+0

これは必ずしも機能しないことに気付いています。これまでは開発モードでのみこのアプリケーションを実行しています。サーバーをシャットダウンしてから再起動すると、以前にアップロードされたファイル(以前のレールサーバーの実行中)が正しく更新されていないようです。なぜこれが不思議ですか? – groffcole

+0

問題が見つかりました。 ajax呼び出しがファイルをキャッシュしていました。すべてがうまく保存されましたが、ブラウザはキャッシュされた古いバージョンをロードしていました。私は次のようにキャッシュしました: '$(document).ready(function(){ $ .ajaxSetup({cache:false}); });' – groffcole

関連する問題