2016-08-11 13 views
2

私はモデルを持っています。ここで私はウェブカメラで写真を撮って保存します。私はcarrierwaveで画像をアップロードすると、画像がAJAXによって送信されるcarrrierwave-data-uri宝石で画像を生成Rails 4:許容されないパラメータ

私PicturesController.rbの機能は次のとおりです。

def upload_image 
    photo = params[:picture][:photo] 
    @picture = Picture.new(picture_params) 
    @picture.user_id = current_user.id 
    @picture.photo = photo 
    @picture.save 
    end 


    private 
    def set_picture 
     @picture = Picture.find(params[:id]) 
    end 

    def picture_params 
     params.require(:picture).permit(:photo, :comment, :user_id) 
    end 
end 

マイアヤックス

function save_photo() { 
    Webcam.snap(function(data_uri) { 

    $.ajax({ 
     type: 'POST', 
     url: '/pictures/upload', 
     async: true, 
     data: { picture: {photo: data_uri} } 
    }) 

    .done(function() { 
     console.log(photo); 
    }); 

    Webcam.reset(); 

    }); 
} 

画像を送信すると、画像はデータベースに登録されますが、画像には登録されません。

許可されていないパラメータ::画像

しかし、私は、パラメータ追加する場合:私の強いパラメータに画像を、私は完了500内部サーバーエラーを取得

データのURI Iは、コンソールエラーを取得します私のコンソールには印刷されていますが、私はイメージを入れません変数

ありがとうございました!

+0

'data_uri = paramsは[::画像]'

data: { picture: { photo: data_uri } } 

また、このようなあなたのコントローラの方法で変更を行います。 'params [:picture] [:image]'を試してみてください。また、許容されないパラメータエラーは、イメージが強いパラメータにないために発生します。 **画像**モデルの**画像属性**を持っているかどうかわかりません。それは '内部サーバーエラー'の理由でなければなりません。 – sajinmp

+0

ありがとうございますが、同じエラーです。データ:{picture:{photo:data_uri}}写真の値が空になる["photo"、nil] –

答えて

2

モデルにimage属性がないため、imageを許可すると、500内部サーバーエラーが発生します。代わりにphotoがあるので、ajaxメソッドでdata_uriを送信するパラメータとして使用する必要があります。

photoへのAJAX呼び出しの変更image

def upload_image 
    @picture = Picture.new(picture_params) 
    @picture.user_id = current_user.id 
    @picture.save 
end 
+0

私がそれをしたとき、パラメータエラーは表示されませんが、写真の値はコンソールで空になります: [["" photo "、nil] –

+0

' ajax'メソッドでデバッグして、 'data_uri'が値を持っているかどうかを確認できますか? – titan

+0

はい、私はそれをしました。値はそこにあります。私はレールコンソールでも、putsでデバッグします。しかし、私が@ picture.photo =写真を撮ると、値は空のままです –