Скрепка в 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