gpt4 book ai didi

ruby-on-rails - Ruby on Rails 多个图像连接到一个对象

转载 作者:太空宇宙 更新时间:2023-11-03 18:08:19 25 4
gpt4 key购买 nike

我一直在尝试创建一个可以获取多个模型参数的表单。我有一个属于产品模型的照片模型,我想制作它以便在创建新产品时还可以上传通过 ID 链接到该产品的图像。

<%= form_for @product, html:{multipart:true} do |f| %>
<div class="field">
<%= f.label :price %>
<%= f.text_field :price %>
</div>
<%=form_for @photo do |t| %>
<%t.productID = f.id%>
<div class="field">
<%= t.label (:image) %>
<%= t.file_field (:image) %>
</div>
<%end%>
<div class="actions">
<%= f.submit %>
</div>
<%end%>
现在我正在使用回形针作为图像附件,照片模型接受图像作为参数。我以前用过回形针,但该产品只能连接一张图片。如果我使用上面的表格,我会收到“表格中的第一个参数不能包含 nil 或为空”错误,它指向 form_for @photo 开始的位置。我有两个 Controller ,使用 new、create、update 等常用方法。我已经将资源路由到产品和照片,但我对 Rails 还是很陌生,并不完全理解这些东西是如何工作的。

最佳答案

我认为您正在尝试做的是使用 fields_for 帮助器为嵌套表单创建一个很好的应用程序。

首先,您需要确保您的产品型号和照片型号具有正确的关联(一个产品可能有很多照片,而一张照片属于一个产品,对吧?)。然后,您将确保产品类“接受照片的嵌套属性”,这允许您从产品表单向照片模型添加属性。

在产品.rb

class Product
has_many :photos
accepts_nested_attributes_for :photos
end

在 photo.rb 中

class Photo
belongs_to :product
end

然后您需要确保照片所需的任何属性都在您的产品参数中列入白名单。

在 products_controller.rb 中

private
def product_params
params.require(product).permit(:first_product_attribute, :second_produtc_attribute, photo_attributes: [:image])
end

最后,您将使用特殊的助手 fields_for

创建表单

在你看来

<%= form_for @product, html:{multipart:true} do |f| %>
<div class="field">
<%= f.label :price %>
<%= f.text_field :price %>
</div>
<%= f.fields_for :photo do |t| %>
<div>
<%= t.label :image %>
<%= t.file_field :image, :multiple => true %>
</div>
<% end %>
<div class="actions">
<%= f.submit %>
</div>
<%end%>

您还需要确保您确实在产品的创建操作中创建了新的照片对象:

在 products_controller.rb 中

def create
@product = Product.new(product_params)
if @product.save!
params[:photo]['image'].each do |img|
@photo = @product.photos.create!(:image => img)
end
flash[:success] = 'product saved!'
redirect_to @product
end
end

其中一些是基于我做同样事情的经验,但使用的是 Carrierwave 而不是 Paperclip,因此您的具体实现可能会略有不同。

关于ruby-on-rails - Ruby on Rails 多个图像连接到一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39539965/

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