我有一个包含许多图片的目录项,并尝试使用嵌套表单和carrierwave通过一个请求上传所有图像。我也使用响应者,haml和简单的形式。 所以,它就像是:
item.rb的
containerView
image.rb
rectForZoomingTransition
_form.html.haml
class Item < ActiveRecord::Base
has_many :images, dependent: :destroy
accepts_nested_attributes_for :images
end
items_controller.rb
class Image < ActiveRecord::Base
belongs_to :item
mount_uploader :image, ImageUploader
end
我是铁杆的新手,显然不按照我想要的方式工作。它会保存项目并完全忽略所有图像。
所以,我想知道,有没有办法在没有像
这样的结构的情况下实现我的目标= simple_form_for(@item, :html => {:multipart => true }) do |f|
= f.error_notification
.form-inputs
= f.input :name
= f.input :description
= f.input :price
= simple_fields_for :images do |image|
= image.file_field :image, multiple: true
.form-actions
= f.button :submit
答案 0 :(得分:3)
所以,最后我找到了答案。我的html表单中有一些错误。 第一个错误非常明显。我用了
= simple_fields_for :images do |image|
而不是
= f.simple_fields_for :images do |image|
_form.html.haml 中的我读完后发现的第二个article. 所以我将嵌套的表单更改为:
= f.simple_fields_for :images, Image.new do |image_form|
= image_form.file_field :image, multiple: true,
name: "item[images_attributes][][image]"
正如Pavan建议的那样,在 items_controller.rb 中以复数形式使用 images_attributes :
def item_params
params.require(:item).permit(
:name, :description, :price,
images_attributes: [:image]
)
end
就是这样。
答案 1 :(得分:0)
尝试将new
方法更改为以下内容
def new
@item = Item.new
@item.images.build
respond_with(@item)
end
此外,当您上传 多个图片 时,请将item_params
更改为
def item_params
params.require(:item).permit(:name, :description, :price, images_attributes: [:image => []])
end