1

Simple-Stored は、レールで CouchDb を処理するための CouchPotato の上に基づいています。ファイルをcouchdbにアップロードしようとしているときに、base64、json postを使用して試しましたが、何も正しく機能していないようです。既に保存されているドキュメントの _attachments プロパティにアップロードしようとしています。

このようなモデルを持つ:

class Patient
  include SimplyStored::Couch
end

更新アクションを介してファイルを受信して​​いる間、コントローラーで

def update
    @patient = Patient.find(params[:id])
    if params[:patient][:_attachments] 
        attachement = params[:patient][:_attachments]
        filedata = attachement.tempfile.read
        data = Base64.encode64(filedata).gsub(/\n/, '')
        type = attachement.content_type
        or_name = attachement.original_filename
        @patient._attachments = {or_name => {'data' => data, 'content_type' => type}}
        @patient.save
        return render :json => @patient._attachments
    end 
end

ここで面白いのは、@patient._acttachments にファイル自体があり、それが .save; の後にレンダリングで返されていることを確認できることです。しかし、実際にはcouchdbデータベースに保存されていません。

保存を行っていない理由、または_attachmentをcouchdbデータベースにプッシュするだけのアイデアがあります。? (ちなみに、これは常に 500 エラーを返します :( )

4

2 に答える 2

3

ソリューションは非常にシンプルで、couchpotato Web サイトに基づいています。実際に base64 に変換する必要はありません。コードの動作例を次に示します。

if params[:patient][:_attachments] 
            attachement = params[:patient][:_attachments]
            data = attachement.tempfile.read
            type = attachement.content_type
            or_name = attachement.original_filename
            params[:patient][:_attachments] = {or_name => {'data' => data, 'content_type' => type}}
end 
  if @patient.update_attributes(params[:patient]) #blah blah blah

値は [:patient][:_attachments] パラメーターにあるため、テスト済みで機能している別のパラメーターとして渡すだけで済みます。

また、患者モデルを次のように定義する必要があります

    property :_attachments

それが必要かどうかはわかりませんが、私はそれをしました。

お金を要求するべきではないことはわかっていますが、私はあなたと4人で働いているので、1時間あたりわずか100ペソです..オフィスでお会いしましょう

乾杯

于 2011-02-25T22:21:00.220 に答える
0

ルビーとカウチポテトについては知りませんが、アタッチメントを Base64 にする必要はないと思います。バイナリ情報を読み取って、リクエストに書き込むだけです。私の2セント。:)

于 2011-02-25T19:58:23.210 に答える