我正在尝试使用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设置。
任何帮助都非常高,谢谢。
答案 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_params函数返回白名单参数,请同时检查允许的参数。 https://activeadmin.info/2-resource-customization.html
并且..如果您仍然面临问题,请告诉我。我会尽力帮助你:)。祝你好运。