我正在使用带有carrierwave gem的Rails 4。我有一个模型user_item_images
user_item
有许多user_item_images
。
schema.rb
create_table "user_item_images", force: :cascade do |t|
t.integer "user_item_id"
t.datetime "created_at"
t.datetime "updated_at"
t.string "picture"
end
我需要一个可以接受多张图片的表单,并为每张图片创建自己的模型对象。
形式
<%= form_for :user_item_image, url: user_item_user_item_images_path(@user_item) do |f| %>
<%= f.file_field :picture, multiple: true %>
<%= f.submit %>
控制器
def create
# raise 'foo'
@user_item = UserItem.find_by_id(params[:user_item_id]).user_item_images.create(user_item_image_params)
redirect_to :back
end
private
def user_item_image_params
params.require(:user_item_image).permit(:picture)
end
我在控制器的创建操作中引发了一个错误,检查user_item_image_params
的值,我得到{}
。
如何一次提交多张图片并为每张图片创建一个单独的模型对象?
更新
按照下面的答案,我将我的参数更改为:
def user_item_image_params
params.require(:user_item_image).permit({picture: []})
end
但是当我提交时没有任何反应。我想我需要重写我的创建动作。基本上如果我有
>> user_item_image_params
=> {"picture"=>[#<ActionDispatch::Http::UploadedFile:0x007f67d9b77d28 @tempfile=#<Tempfile:/tmp/RackMultipart20160317-588761-mjk73n.JPG>, @original_filename="IMG_0313.JPG", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"user_item_image[picture][]\"; filename=\"IMG_0313.JPG\"\r\nContent-Type: image/jpeg\r\n">, #<ActionDispatch::Http::UploadedFile:0x007f67d9b77d00 @tempfile=#<Tempfile:/tmp/RackMultipart20160317-588761-edqw7.JPG>, @original_filename="IMG_0314.JPG", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"user_item_image[picture][]\"; filename=\"IMG_0314.JPG\"\r\nContent-Type: image/jpeg\r\n">, #<ActionDispatch::Http::UploadedFile:0x007f67d9b77cd8 @tempfile=#<Tempfile:/tmp/RackMultipart20160317-588761-buatxk.JPG>, @original_filename="IMG_0315.JPG", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"user_item_image[picture][]\"; filename=\"IMG_0315.JPG\"\r\nContent-Type: image/jpeg\r\n">]}
如何从每张图片中制作模型对象,在本例中为3。
答案 0 :(得分:0)
图像需要作为哈希和数组传递。
def user_item_image_params
params.require(:user_item_image).permit({picture: []})
end
此外,您的模型应使用mount_uploaders
代替mount_uploader
。
class UserItemImages
mount_uploaders :picture
end