Скрепка в Rails 4 - Сильные параметры Запрещенные атрибуты Ошибка
Проблема с загрузкой Paperclip в Rails 4 - сбой в ForbiddenAttributesError (сильная проверка параметров). У вас есть последний драгоценный камень скрепки и последние рельсы 4 драгоценных камня.
У меня есть модель "Изображение" с прикрепленным файлом "upload" в модели:
has_attached_file :upload, :styles => { :review => ["1000x1200>", :png], :thumb => ["100x100>", :png]}, :default_url => "/images/:style/missing.png"
Модель изображения была создана с помощью эшафота, и я добавил миграцию скрепки. Частичная форма была обновлена, чтобы использовать
f.file_field :upload
форма генерирует то, что кажется типичным набором параметров paperclip, с параметром изображения, содержащим загрузку. Я также передаю transaction_id в модели изображения, поэтому это должно быть разрешено. Но это - изображение и идентификатор транзакции.
Я ожидал, что смогу написать следующее в своем контроллере, чтобы добавить белый список в мой пост, но это не удалось:
def image_params
params.require(:image).permit(:transaction_id, :upload)
end
Итак, я стал более явным - но это тоже не удалось:
def image_params
params.require(:image).permit(:transaction_id, :upload => [:tempfile, :original_filename, :content_type, :headers])
end
Я немного расстроен тем, что Rails 4 не показывает мне, что ForbiddenAttributesError терпит неудачу в среде разработки - предполагается, что она показывает ошибку, но это не так - было бы хорошим патчем, чтобы облегчить разработку. Или, возможно, все остальные получают то, что мне не хватает! Большое спасибо за помощь.
Ответы
Ответ 1
Я понимаю, что здесь произошло сейчас, и оставит это в надежде, что это поможет кому-то другому. Я портировал код из проекта rails 3 и пропустил линию, которая создала изображение:
@image = current_user.images.new(params[:image])
В рельсах 4 это неверно (я верю). Я обновился до
@image = current_user.images.new(image_params)
и это решило мою проблему.
Ответ 2
Похоже, ваш первый должен сработать. Это то, что я использую для своих проектов.
class GalleriesController < ApplicationController
def new
@gallery = Gallery.new
end
def create
@user.galleries.new(gallery_params)
end
private
#note cover_image is the name of paperclips attachment filetype(s)
def gallery_params
params.require(:gallery).permit(:cover_image)
end
end