2013-10-15 2 views
3

Пожалуйста, помогите мне ... Я использую paperclip для загрузки 1 изображения в теге canvas (base64) в aws-s3.Скрепка с базой64: неопределенный метод `stringify_keys 'для # <String: 0xb46dba14>

Мой контроллер

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 

ответ

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 
+0

Теперь работайте хорошо. Но я удаляю строку «file.close». Большое вам спасибо. – JohnEvans

+0

Мне очень жаль, потому что я не голосую за тебя. Потому что для голосования требуется 15 человек. : D – JohnEvans

+0

Хе-хе, я просто поддержал ваше Q, теперь вам просто нужен другой голос, откуда! :) –

1

ты пользуешься в Обновит e_attributes() или build() таким образом?

update_attribures (PARAMS [: фото])

Вы, если так что вы должны использовать это вместо того, чтобы:

update_attributes (: фото => Params [: фото])

Надеюсь, что это поможет и работает для вас.

+0

Спасибо за помощь. Но я не использую update_attributes() или build() таким образом. Любым другим путем? – JohnEvans

Смежные вопросы