Я работаю над приложением rails и создаю вложенный ресурс для изображений. Модель Picture
, и она полиморфна и взаимодействует с несколькими разными таблицами.rails paperclip: param отсутствует или значение пуст
Я работаю над действием контроллера и методом создания. Согласно this answer и другим вещам, которые я видел с помощью скрепки, параметры должны соответствовать формату table_name
, а затем file
. Даже при этом я все еще получаю ошибку param is missing or the value is empty: picture
.
Вот мой код:
Picture.rb
class Picture < ActiveRecord::Base
belongs_to :imageable, polymorphic: true
has_attached_file :image, style: { small: '64x64', medium: '100x100', large: '200x200' }
validates_attachment :image, presence: true, content_type: { content_type: /\Aimage\/.*\Z/ },
size: { in: 0..5.megabytes }, default_url: 'missing_img.png'
acts_as_list scope: [:imageable_id, :imageable_type]
end
pictures_controller.rb
class PicturesController < ApplicationController
before_action :authorize_user!
before_action :set_resource!
def index
@pictures = @resource.pictures
end
def create
@picture = @resource.pictures.new(picture_params) do |pic|
pic.imageable_type = @resource
pic.imageable_id = @resource.id
end
if @picture.save
redirect_to :back
flash[:success] = 'Image Saved!'
else
redirect_to :back
flash[:danger] = "#{@picture.errors.full_messages.to_sentence}"
end
end
def destroy
@picture = Picture.find(params[:id])
@resource.pictures.delete(@picture)
redirect_to :back
flash[:success] = "Picture deleted"
end
private
def set_resource!
klass = [Gym, User, Location, Product].detect { |c| params["#{c.name.underscore}_id"] }
@resource = klass.find(params["#{klass.name.underscore}_id"])
end
def picture_params
params.require(:picture).permit(:image)
end
end
фото/index.html
<h6>Upload Pictures</h6>
<%= form_for(current_user, url: url_for(controller: 'pictures', action: 'create'), method: :post, html: { multipart: true, class: 'form-horizontal' }) do |f| %>
<%= f.file_field :image, type: :file, multiple: true, style: 'padding-bottom: 25px;' %>
<%= f.submit "Upload", class: "btn btn-gen" %>
<% end %>
А вот запрос на форме паров представить:
{"utf8"=>"✓",
"authenticity_token"=>"+fsA6liECF7pkUp/0BA0wDHq9Vv63jB+WBb7O/uUEDhhmIOZ22Rb1rNWDwuwPTDPNS7jg7vP/fVCVllDV21wDw==",
"user"=>{"image"=>[#<ActionDispatch::Http::UploadedFile:0x007f87b138acf8 @tempfile=#<Tempfile:/var/folders/9c/1_0mk00n297f560_fpv9jzl40000gn/T/RackMultipart20161020-25582-3qt3gc.jpg>,
@original_filename="b4lROOR.jpg",
@content_type="image/jpeg",
@headers="Content-Disposition: form-data; name=\"user[image][]\"; filename=\"b4lROOR.jpg\"\r\nContent-Type: image/jpeg\r\n">]},
"commit"=>"Upload",
"user_id"=>"15"}
Даже с этим, я все еще получаю ошибку. Кто-нибудь видит что-то неправильное, что я делаю в своем коде, который я мог бы исправить? Буду признателен за любую оказанную помощь.
Это замечательно, и отличный рефактор! Единственная проблема, которую я испытываю при использовании этого, в моей форме, я получаю сообщение об ошибке, что изображение не было добавлено. Я еще немного отлаживаю и дам вам знать –