gpt4 book ai didi

ruby-on-rails - Rails - 使用一个 form_for 上传多个文件的问题

转载 作者:太空宇宙 更新时间:2023-11-03 17:54:30 24 4
gpt4 key购买 nike

我有一个创建产品页面,允许用户向产品添加多个图像。所以自然而然地我有许多图像上传字段,但是,当创建产品时,它只会拍摄一张照片并将其添加到数据库中。不是其他人。我犯了一些简单的错误,但我不知道它是什么。

感谢您的帮助!

新产品形式 (haml)

%h1 
create item
= form_for @product,:url => products_path, :html => { :multipart => true } do |f|
%p
= f.label :name
= f.text_field :name
%p
= f.label :description
= f.text_field :description
%p
= fields_for :photo, :html => {:multipart => true} do |fp|
=fp.file_field :image
%p
= fields_for :photo, :html => {:multipart => true} do |fp|
=fp.file_field :image

%p.button
= f.submit

产品控制

  def new 
@product = Product.new
@photo = Photo.new
end


def create
@product = current_user.products.build(params[:product])
@photo = current_user.photos.new(params[:photo])

if @product.valid? && @photo.valid?
@product.save
@photo.product_id = @product.id
@photo.save
render "show", :notice => "Sale created!"
else
render "new", :notice => "Somehting went wrong!"
end
end

最佳答案

您正在尝试实现嵌套属性形式。所以将 fields_for 部分更改为

%p
= f.fields_for :photos do |fp|
=fp.file_field :image

然后在 Controller 中改变你的新方法

def new 
@product = Product.new
3.times{ @product.photos.build }
end


def create
@product = current_user.products.new(params[:product])
if @product.valid?
@product.save
render "show", :notice => "Sale created!"
else
render "new", :notice => "Something went wrong!"
end
end

你的模型应该像下面这样关联

class Product
has_many :photos
accepts_nested_attributes_for :photos, allow_destroy: true
end

class Photo
attr_accessible :image
belongs_to :product
end

如果你想为照片实现一个“添加更多”按钮,你可以使用 Gem nested_form .它非常漂亮。

关于ruby-on-rails - Rails - 使用一个 form_for 上传多个文件的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16932107/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com