Моя основная проблема заключается в том, что при загрузке через несущую волну файл по-настоящему не загружается.Carrierwave не создает папку для загрузки
Мой вывод консоли:
#<OptionPic id: 4, image_url: "game_of_thrones___tyrion_lannister_by_stanbos-d79k...", created_at: "2015-08-07 06:08:01", updated_at: "2015-08-07 06:08:01", option_id: 12>]>
Вызов к изображению следующие
[email protected] do |option|
-option.option_pics.each do |op|
=image_tag op.image_url.to_s
Если я проверить элемент на веб-странице, это то, что я получаю:
<img src="/images/game_of_thrones___tyrion_lannister_by_stanbos-d79k0u9_modified.jpg" alt="Game of thrones tyrion lannister by stanbos d79k0u9 modified">
Однако настройки для загрузчика следующие:
class ProductImageUploader < CarrierWave::Uploader::Base
# Include RMagick or MiniMagick support:
include CarrierWave::RMagick
# include CarrierWave::MiniMagick
# Choose what kind of storage to use for this uploader:
storage :file
# storage :fog
# Override the directory where uploaded files will be stored.
# This is a sensible default for uploaders that are meant to be mounted:
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
Излишне говорить, что у меня нет изображения в папке «Ресурсы/Изображения» или в папке public/uploads.
Это отлично работает в моем другом проекте (папка public/uploads создается с тем же синтаксисом, что и выше), где изображения хранятся как отдельная модель. В моем текущем проекте я хочу, чтобы они были дополнительным вариантом для класса продукта.
структура выглядит следующим образом:
модель - продукт, вариант, optionpic (кривизна)
продукт может иметь множество вариантов, и в своей очереди, вариант может иметь много фотографий. Например - продукт - футболка. Возможные варианты: материал и цвет. Для каждого цвета я хочу другую картину рубашки.
Вот почему у меня есть все, что в моей ProductsController:
Class ProductsController < ApplicationController
before_action :find_product, only: [:show]
def show
end
def index
@products = Product.all
end
def new
@product = Product.new
@option = @product.options.new
@option_pic = OptionPic.new
end
def edit
end
def create
@product = Product.create(product_params)
@option = @product.options.create(option_params)
@option.product_id = @product.id
@option.save
@option_pic = @option.option_pics.create(pic_params)
@option_pic.option_id = @option.id
flash[:success] = "Product successfully created!"
redirect_to products_path
end
private
def product_params
params.require(:product).permit(:title, :description, :advertising_text, :fancy_quote)
end
def option_params
params.require(:option).permit(:size, :weight, :price, :material, :product_id)
end
def pic_params
params.require(:option_pic).permit(:image_url, :option_id)
end
def find_product
@product = Product.find(params[:id])
end
end
Мой optionpic (кривизна) Модель:
class OptionPic < ActiveRecord::Base
mount_uploader :product_image, ProductImageUploader
belongs_to :option
end
Я думаю, что я делаю только некоторые немого новичка ошибки, но после нескольких часов поиск Я просто не могу понять, что не так.
Редактировать
я понял две вещи - я использовал IMAGE_URL вместо picture_image и забыл фактически сохранить значения option_picture в контроллере, т.е. @option_pic.save
Как когда-либо в настоящее время нет передачи данных при загрузке:
SQL (0.3ms) INSERT INTO "option_pics" ("product_image", "option_id", "created_at", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "id" [["product_image", nil], ["option_id", 18], ["created_at", "2015-08-07 08:03:28.559319"], ["updated_at", "2015-08-07 08:03:28.559319"]]
Я обновил все значения от: IMAGE_URL до: product_image (в представлении, в pic_params и т.д.)
Edit 2
В соответствии с просьбой, моя форма загрузки:
%h1 Create new product
=form_for @product, url: products_path do |f|
%p
=f.label :title
=f.text_field :title
%br
=f.label :description
=f.text_area :description
%br
=f.label :advertising_text
=f.text_area :advertising_text
%br
=f.label :fancy_quote
=f.text_area :fancy_quote
%p
= fields_for @option do |o|
=o.label :price
=o.text_field :price
%br
=o.label :size
=o.text_field :size
%br
=o.label :weight
=o.text_field :weight
%br
=o.label :material
=o.text_field :material
%p
= fields_for @option_pic, html: { multipart: true } do |op|
= op.label 'Upload image'
= op.file_field :product_image
=f.submit
Edit 3
В соответствии с просьбой, мои параметры журнала
Started POST "/products" for ::1 at 2015-08-07 12:25:31 +0300
Processing by ProductsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"DOeZMvYpdoVmZRpsGmg2Gr9LIc9RYaS1KT1vdfhXI2BJaV3pPZZbZN8PJnvwQAig8wLPpIUORuf7Kjcw3BE6Zg==", "product"=>{"title"=>"fafa", "description"=>"", "advertising_text"=>"", "fancy_quote"=>""}, "option"=>{"price"=>"", "size"=>"", "weight"=>"", "material"=>""}, "option_pic"=>{"product_image"=>"level-3-on-rails-for-zombies-2-0eaaf0109f83459c5aedef30bdf8bd96.png"}, "commit"=>"Create Product"}
(0.1ms) BEGIN
SQL (0.3ms) INSERT INTO "products" ("title", "description", "advertising_text", "fancy_quote", "created_at", "updated_at") VALUES ($1, $2, $3, $4, $5, $6) RETURNING "id" [["title", "fafa"], ["description", ""], ["advertising_text", ""], ["fancy_quote", ""], ["created_at", "2015-08-07 09:25:31.365739"], ["updated_at", "2015-08-07 09:25:31.365739"]]
(0.3ms) COMMIT
(0.1ms) BEGIN
SQL (0.2ms) INSERT INTO "options" ("size", "material", "product_id", "created_at", "updated_at") VALUES ($1, $2, $3, $4, $5) RETURNING "id" [["size", ""], ["material", ""], ["product_id", 29], ["created_at", "2015-08-07 09:25:31.369112"], ["updated_at", "2015-08-07 09:25:31.369112"]]
(0.3ms) COMMIT
(0.1ms) BEGIN
(0.1ms) COMMIT
(0.1ms) BEGIN
SQL (0.3ms) INSERT INTO "option_pics" ("product_image", "option_id", "created_at", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "id" [["product_image", nil], ["option_id", 21], ["created_at", "2015-08-07 09:25:31.372492"], ["updated_at", "2015-08-07 09:25:31.372492"]]
(0.3ms) COMMIT
Redirected to http://localhost:3000/products
Completed 302 Found in 10ms (ActiveRecord: 2.1ms)
Показать код (ERB) вашей формы загрузки. – EugZol
Добавлено в конце – mohnstrudel
Покажите, какие параметры ваш запрос действительно получает - скопируйте строку из 'log/development.log'. Кажется, что у вас есть ошибка при обработке вложенных параметров. – EugZol