Загрузка не работает с использованием Carrierwave в Rails 5 - PullRequest
0 голосов
/ 16 января 2019

Итак, я работал над своим приложением и пытался включить функцию загрузки.

Сначала я сгенерировал загрузчик курса и разрешил jpeg, jpg, png и gif.

Затем я добавил монтирование кода ff на моей модели курса:

  mount_uploader :thumb_image, CoursesUploader
  mount_uploader :main_image, CoursesUploader

Затем я помещаю код формы загрузки файла в мой файл new.html.erb:

  <div class="field">
    <%= f.file_field :main_image %>
  </div>

  <div class="field">
  <%= f.file_field :thumb_image %>
</div>

И когда я попытался отправить свою форму с загруженными изображениями, она даже не показала страницу индекса, вместо этого я обновляю страницу и затем проверяю, была ли она загружена и форма была успешно отправлена, но это не так.

Я также смотрю на сильные параметры на моем контроллере, и вот эти два элемента:

  # Never trust parameters from the scary internet, only allow the white list through.
    def course_params
      params.require(:course).permit(:title, :price, :body, :main_image, :thumb_image)
    end

Есть идеи, что мне здесь не хватает?

Вот что я получил из своего терминала после отправки:

Started POST "/courses" for 127.0.0.1 at 2019-01-16 20:52:20 +0800
Processing by CoursesController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"wlKpv8czsuC6AZjCctxYk203wry4cb0dnOYI9IoAkzRZNV2vB4/vREU5L5u4G7vh5ZhCbHZlJ6nHPN95qO+cbA==", "course"=>{"title"=>"Goody", "price"=>"33", "main_image"=>#<ActionDispatch::Http::UploadedFile:0x007f81e52eed48 @tempfile=#<Tempfile:/var/folders/3_/8bmsd3j13bxfdl1jp7gzvvsm0000gn/T/RackMultipart20190116-2359-17w6pb.jpg>, @original_filename="61230.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"course[main_image]\"; filename=\"61230.jpg\"\r\nContent-Type: image/jpeg\r\n">, "thumb_image"=>#<ActionDispatch::Http::UploadedFile:0x007f81e52eecd0 @tempfile=#<Tempfile:/var/folders/3_/8bmsd3j13bxfdl1jp7gzvvsm0000gn/T/RackMultipart20190116-2359-2mcy4i.jpg>, @original_filename="61230.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"course[thumb_image]\"; filename=\"61230.jpg\"\r\nContent-Type: image/jpeg\r\n">, "body"=>""}, "commit"=>"Create Course"}
   (0.5ms)  BEGIN
  ↳ app/controllers/courses_controller.rb:27
  Course Exists (1.5ms)  SELECT  1 AS one FROM "courses" WHERE "courses"."id" IS NOT NULL AND "courses"."slug" = $1 LIMIT $2  [["slug", "goody"], ["LIMIT", 1]]
  ↳ app/controllers/courses_controller.rb:27
   (0.6ms)  ROLLBACK
  ↳ app/controllers/courses_controller.rb:27
  Rendering courses/new.html.erb within layouts/application
  Rendered courses/new.html.erb within layouts/application (12.6ms)
  Rendered shared/_application_nav.html.erb (6.2ms)
  Rendered shared/_application_footer.html.erb (1.3ms)
Completed 200 OK in 394ms (Views: 356.6ms | ActiveRecord: 2.6ms)

ОБНОВЛЕНИЕ: СОДЕРЖАНИЕ ПОЛНОЙ МОДЕЛИ

class Course < ApplicationRecord
  include DefaultsConcern

  enum status: { draft: 0, published: 1 }
  validates_presence_of :title, :price, :body, :main_image, :thumb_image

  mount_uploader :thumb_image, CoursesUploader
  mount_uploader :main_image, CoursesUploader

  extend FriendlyId
  friendly_id :title, use: :slugged

end

СОДЕРЖАНИЕ ПОЛНОЙ ФОРМЫ:

<h1>New Form</h1>

<%= form_for(@course) do |f| %>
  <div class="field">
    <%= f.label :title %>
    <%= f.text_field :title %>
  </div>

  <div class="field">
    <%= f.label :price %>
    <%= f.number_field :price %>
  </div>

  <div class="field">
    <%= f.file_field :main_image %>
  </div>

  <div class="field">
  <%= f.file_field :thumb_image %>
</div>

  <div class="field">
    <%= f.label :body %>
    <%= f.text_area :body %>
  </div>

  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Я уже вижу, что Изображение - это ActionDispatch, но вы уверены, что создали столбец таблицы следующим образом - независимо от создания таблицы или добавления_колонки-

Я сосредотачиваюсь на

:string, array: true, default: []

Миграция должна выглядеть так:

add_column :courses, :main_image, :string, array: true, default: []

Поскольку создание столбца в виде String не позволит carrierwave добавлять свой объект в виде массива, он должен быть массивом

Также вы можете установить большой палец и основные изображения в одном загрузчике, если вы собираетесь изменять только размер, в противном случае вы можете использовать: thumb_image и: main_image, но убедитесь, что миграция верна

Если вы не можете изменить его, просто перетащите и заново создайте его

0 голосов
/ 16 января 2019

Проверка не удалась, поскольку params[:course][:body] равно nil, из-за чего создание курса откатилось

validates_presence_of :title, :price, :body, :main_image, :thumb_image

=> Так что просто заполните body поле в форме или удалите validates_presence_of :body

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...