Загрузка изображения в Cloudinary с помощью rails (без неявного преобразования нуля в строку), пока

#reactjs #ruby-on-rails #cloudinary

Вопрос:

Я пытаюсь загрузить изображение на CDN с помощью rails и реагировать .

Сначала я отправляю данные с интерфейса react через formdata. с функцией отправки, подобной этой

 const handleSubmit = async (event) => {
        event.preventDefault()
        setLoading(true)
        const formData = new FormData();
        formData.append('blog[title]',title)
        formData.append('blog[body]',body)
        formData.append('blog[image]',bannerImage)

        try{
            const response = await axios.post("/blogs",formData)
            setLoading(false)
            console.log("blog submit response", response)
            setBlogPosted(response.data.blog)
            history.push(`/blogs/${response.data.blog.id}/preview`)
            setLoading(false)
        } catch(error){
            console.log("blog not saved error",error)
        }        
    }
 

на серверную часть рельсов
и метод создания для того же в контроллере

 def create
    @blog = Blog.new(blog_params.merge(user_id: @current_user.id))
    upload_image = Cloudinary::Uploader.upload(params[:image])
    @blog.update(image: upload_image['url'])

    if authorized?
      if @blog.save
        render status: :ok,
              json: {blog: @blog , notice: "Blog Successfully created"}
      else
        errors = @blog.errors.full_messages.to_sentence
        render status: :unprocessable_entity, json: {error:errors}
      end
    end
  end

 

и консоль показывает параметры, которые передаются как

 Started POST "/blogs" for ::1 at 2021-09-24 19:46:01  0530
Processing by BlogsController#create as JSON
  Parameters: {"blog"=>{"title"=>"<p>vjbklm;</p>", "body"=>"<p>nkml,</p>", "image"=>#<ActionDispatch::Http::UploadedFile:0x000000000eca9d98 @tempfile=#<Tempfile:C:/Users/user/AppData/Local/Temp/RackMultipart20210924-8588-1fxz7dp.png>, @original_filename="logo.png", @content_type="image/png", @headers="Content-Disposition: form-data; name="blog[image]"; filename="logo.png"rnContent-Type: image/pngrn">}}
 

но получаю ошибку
Completed 500 Internal Server Error in 667ms (ActiveRecord: 102.3ms | Allocations: 18933) TypeError (no implicit conversion of nil into String):
я не могу понять, передаются ли параметры изображения со значением, указанным выше в параметрах, тогда почему upload_image = Cloudinary::Uploader.upload(params[:image]) получается нулевое значение.

или что я делаю не так , любая помощь будет очень полезна.

Комментарии:

1. Поскольку данные параметров находятся в блоге [«изображение»], разве параметры не должны быть парами[:блог][:изображение] или чем-то другим в этих строках? Когда вы выводите параметры перед строкой upload_image = Cloudinary::Uploader.upload(параметры[:изображение]), что вы получаете?

2. Большое спасибо, ваши комментарии помогли мне решить мою проблему

3. Рад, что помог!