3

助けてください...ペーパークリップを使用して、キャンバスタグ(base64)の1枚の写真をaws-s3にアップロードします。

私のコントローラー

    def create
    decoded_file = Base64.decode64(params[:photo])
      begin
        file = Tempfile.new(['test', '.jpg']) 
        file.binmode
        file.write decoded_file
        file.close
        @photo.photo =  file
        if @photo.save
          render :json => {:message => "Successfully uploaded the profile picture."}
        else
          render :json => {:message => "Failed to upload image"}
        end
      ensure
        file.unlink
      end
  end

モデル

 class Photo < ActiveRecord::Base
  has_attached_file :photo, styles: { thumbnail: "150x200#"}, default_style: :thumbnail
end

そしてエラー:

NoMethodError at /photos
===================================
> undefined method `stringify_keys' for #<String:0xb46dba14>
activerecord (4.0.0) lib/active_record/attribute_assignment.rb, line 17
4

2 に答える 2

2

わかりました、私は何かを得たと思います。

2 つの潜在的な問題があります。

  1. ファイル (キャンバスを含む) の作成が正しくない可能性があります
  2. 関数@post.saveが正しくない可能性があります

私はキャンバスのことは知りません....だから私はあなたに私のベストショットを与えるつもりです@post.save:

 def create
    decoded_file = Base64.decode64(params[:photo])
      begin
        file = Tempfile.new(['test', '.jpg']) 
        file.binmode
        file.write decoded_file
        file.close

        params[:photo] = file

        @photo.new(photo_params)
        if @photo.save
          render :json => {:message => "Successfully uploaded the profile picture."}
        else
          render :json => {:message => "Failed to upload image"}
        end
      ensure
        file.unlink
      end
  end

  private
  def photo_params
      params.permit(:photo)
  end
于 2013-10-15T16:30:53.867 に答える
1

このように update_attributes() または build() を使用していますか?

update_attribures(params[:photo])

もしそうなら、代わりにこれを使用する必要があります:

update_attributes(:photo => params[:photo])

それがあなたに役立ち、うまくいくことを願っています。

于 2013-10-15T11:43:05.610 に答える