2

記録のために、私はレガシーコードに取り組んでおり、すべてを壊すことなく新しい機能をプラグインしようとしています。現在、サーバーには次のようなファイルがたくさんあります。

 myapp/public/temp/myfile.doc

重要なのは、コントローラーアクションでこれらのファイルからDocfileオブジェクトを作成したいということです。

縮小されたDocfileクラスは次のとおりです。

class DocFile < ActiveRecord::Base
  has_attached_file :docs,
    :path => "#{Constants::DOCFILES_PATH}:basename.:extension",
    :url => "http://#{Constants::SITE_URL}/docs/:basename.:extension"
end

フォームからアップロードする場合、ペーパークリップにはいくつかの優れたドキュメントがありますが、私の状況ではそうではありません。

では、ファイルをアップロードしているという事実を「シミュレート」するにはどうすればよいでしょうか。

これまで私はこれを試しました:

temp_file_url = "correct_rails_root/myapp/public/temp/myfile.doc"
@docfile = DocFile.new :docs => temp_file

しかし、それは機能していません。

どんなポインタでもいただければ幸いです!

編集:

これは私がしました:

temp_file_url = Constants::TEMPORARY_UPLOAD_PATH + "/" + params[:temp_file_upload][:doc]
temp_file = File.new(temp_file_url,  "w+")
@docfile = DocFile.new :docs => File.open(temp_file_url)

まだ機能していません

4

4 に答える 4

3

私はこれをしなければなりませんでした:

temp_file_name = #the filename
temp_file_path = Constants::TEMPORARY_UPLOAD_PATH + "/" + temp_file_name
temp_file = File.new(temp_file_path,  "r")

@docfile = DocFile.new :docs => temp_file

どうやら私が「読み取り」としてファイルを開かなかった場合、それは機能しませんでした。それは私にはほとんど意味がありませんが、今は機能しています!

于 2009-11-27T10:22:41.303 に答える
1

私はRailsの権威ではありませんが、

@docfile = DocFile.new :docs => temp_file

あるべきではない

@docfile = DocFile.new :docs => temp_file_url  
于 2009-11-26T15:32:38.837 に答える
1

オブジェクトを渡す必要がPaperclipありFileます:

temp_file_path = 'correct_rails_root/myapp/public/temp/myfile.doc'
@docfile = DocFile.new :docs => File.open(temp_file_path)
于 2009-11-26T15:47:00.193 に答える
0

移行でこれに対処する必要があると思います。既存のファイルの場合、ペーパークリップがモデルに追加する列にデータを入力する必要があります(xxx_file_namexxx_content_type, xxx_file_size)。がレガシードキュメントディレクトリにマップされているかどうかについては言及していませんConstants::DOCFILES_PATHが、それでも、ペーパークリップが期待するディレクトリ構造にこれらのファイルをシンボリックリンクする必要があると思います。

于 2009-11-26T15:35:08.850 に答える