使用ActiveAdmin + CarrierWave上传多张照片

时间:2017-04-17 15:36:23

标签: ruby-on-rails activeadmin carrierwave

我正在尝试使用carrierwave和activeadmin gem上传多张照片。但问题是Rails表示有Unpermitted parameter: photos,即使我已将照片添加到activeadmin gem的permit_params

#app/admin/apartment_post.rb

代码:

ActiveAdmin.register ApartmentPost do
  permit_params :title, :max_stay, :bed_configuration, :number_of_guests, 
                            :rate, :features, :description, photos: []
  form(html: { multipart: true }) do |f|
    f.inputs do
      f.input :title
      f.input :max_stay
      f.input :bed_configuration
      f.input :number_of_guests
      f.input :rate
      f.input :features
      f.input :description
      f.input :photos, as: :file, multiple: true
    end
    f.actions
  end
end

#app/model/apartment_post.rb

代码:

class ApartmentPost < ApplicationRecord
  mount_uploaders :photos, PhotoUploader
  validates :title, :max_stay, :bed_configuration, :number_of_guests,
            :rate, :features, :description, presence: true
end

schema.rb

代码:

create_table "apartment_posts", force: :cascade do |t|
  t.integer  "max_stay",          null: false
  t.string   "bed_configuration", null: false
  t.integer  "number_of_guests",  null: false
  t.float    "rate",              null: false
  t.string   "features",          null: false
  t.string   "description",       null: false
  t.datetime "created_at",        null: false
  t.datetime "updated_at",        null: false
  t.string   "title",             null: false
  t.json     "photos"
end

photo_uploader.rb文件是默认的,由carrierwave设置。

任何帮助都非常高,谢谢。

1 个答案:

答案 0 :(得分:2)

很抱歉迟到的回复:)。

希望这会对你有所帮助。

ActiveAdmin.register ApartmentPost do
  permit_params :title, :max_stay, :bed_configuration, :number_of_guests, 
                            :rate, :features, :description, { photos: [] }

  form(html: { multipart: true }) do |f|
    f.inputs do
      f.input :title
      f.input :max_stay
      f.input :bed_configuration
      f.input :number_of_guests
      f.input :rate
      f.input :features
      f.input :description
      f.file_field :photos, multiple: true
    end
   f.actions
end

您是否真的能够在输入法中使用as :: file(第二个参数)上传多个文件?。

我检查的是指定为::第二个参数中的文件不允许输入多个图像。它生成以下html文件标记,并且您尝试将照片属性作为数组作为列入白名单的参数。

<input id="photos" type="file" name="apartment_post[photos]">

rails提供了一个简单的方法file_field。 file_field帮助器方法返回一个html输入文件标记。尝试使用file_field。 更多细节 https://apidock.com/rails/ActionView/Helpers/FormHelper/file_field

我不确定这是否会导致错误,但可能的原因。

进行上述更改后。如果你还遇到问题您可以通过覆盖create动作或将params列入白名单的函数来检查调试器的参数。

  controller do
    def create
      aparment_params = params.require(:apartment_post).permit(:title, 
                                                          { photos: [] })
      // here you can use your debugger to check the params.

    end
  end

allowed_pa​​rams函数返回白名单参数,请同时检查允许的参数。 https://activeadmin.info/2-resource-customization.html

并且..如果您仍然面临问题,请告诉我。我会尽力帮助你:)。祝你好运。