0

Я создаю приложение для фотогалереи, которое позволяет пользователям прикреплять несколько фотографий к каждой из своих галерей. Я использую Paperclip для обработки загрузки файлов."param отсутствует или значение пуст:" Paperclip no file selected - Rails

Приведенный ниже код работает нормально, пока на него не будет нажата кнопка [Загрузить], при этом файл не будет выбран. Насколько я понимаю, он застревает на контроллере, прежде чем он будет передан модели Photo для запуска ее присутствия, проверки типа файла и размера файла.

получила Ошибку при нажатии кнопки [Загрузить] без файла, выбранного в: «пары отсутствуют или значение пустое: фото» Извлеченные источник имеет photo#photo_params линии выделена.

Галерея Модель:

class Gallery < ActiveRecord::Base 
    belongs_to :user 
    has_many :photos 
end 

Фотомодель:

class Photo < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :gallery 

    has_attached_file :photo, 
    s3_permissions: :private 

    validates_attachment :photo, 
    presence: true, 
    content_type: { 
     content_type: [ 
     "image/jpeg", # JPEG/JPG 
     "image/png" # PNG 
     ] }, 
    size: { in: 0..5.megabytes } 
end 

действие контроллера (фото # создать):

def create 
    @photo = Photo.new(photo_params) 
    @photo.gallery_id = @gallery.id 
    @photo.user_id = current_user.id 

    if @photo.save 
     flash[:success] = "Photo successfully saved." 
     redirect_to gallery_path(@photo.gallery) 
    else 
     flash[:error] = "The photo upload failed! Make sure the file you're trying to upload is of a supported type (JPG, JPEG or PNG) and try again." 
     redirect_to gallery_path(@photo.gallery) 
    end 
    end 

Сильные Params (фото # photo_params):

def photo_params 
    params.require(:photo).permit(:photo) 
end 

Загрузить Форма:

<%= form_for Photo.new, url: gallery_photos_path(@gallery) do |f| %> 
    <%= f.label :photo %> 
    <%= f.file_field :photo %> 

    <%= f.submit "Upload" %> 
    <% end %> 

Я понимаю, что использование Model.new в форме, вероятно, не является лучшей практикой, но так как форма загружается как частичный на галереи # шоу зрения, это было единственный способ, которым я мог это сделать.

Я также думаю, что наличие модели с именем :photo и фактическое вложение скрепки, также называемое :photo, также могут быть причиной. Это верно?

Кто-нибудь знает, что здесь происходит?

ответ

0

Да, я думаю, что, как вы упомянули, вы должны переименовать свое приложение для скрепки, хотя я не уверен, что он вызывает какие-либо проблемы, имея код photo_params.require(:photo).permit(:photo) не может быть хорошим.

Дополнительно для вашего условия else в создании попробуйте сначала перенаправить на root_path. Я думаю, что ваш маршрут может быть неправильным, так как ваша переменная экземпляра @photo на самом деле является Photo.new.

Надеюсь, что это поможет! Я не эксперт по рельсам. Приветствия.

0

Глядя на ошибку, я думаю, что она проверяет наличие «фотографии» в параметрах.

Как вы добавили «присутствие: правда» в validates_attachment: фото блока, вы должны предусмотреть, что в Params

ИЛИ

, если вы хотите, чтобы загрузить форму без файла вы должны удалить «присутствие: правда» ограничение.

0

Защиту photo_params

params.require(:photo).permit(:photo) 

конец

изменить имя атрибута это становится путать с модальным и attribut имя может быть

Защиту photo_params

params.require (: фото) .permit (: photo_url)

конец

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