我正在构建一个用于存储产品的Rails应用程序,因此产品具有多种图像。创建新记录时,我最多可以上传4张图片,这是产品控制器中的新操作:
def new
@product = Product.new
4.times { @product.images.build }
end
这就是观点:
<%= form_for @product, :html => {:multipart => true} do |f| %>
.
.
.
.
<%= f.fields_for :images do |builder| %>
<% if builder.object.new_record? %>
<p>
<%= builder.label :image, "Image File" %>
<%= builder.file_field :image %>
</p>
<% end %>
<% end %>
<% end %>
在产品模型中,我允许嵌套属性:
accepts_nested_attributes_for :images, :reject_if => lambda { |t| t['image'].nil? }
到目前为止一切都很好。我的问题是:如何更新属于产品的图像?例如:如果用户创建包含2或3个图像的新记录,则用户应该能够编辑产品说明及其图像。到目前为止,我的编辑操作是这样定义的:
def edit
@product = Product.find(params[:id])
end
def update
@product = Product.find(params[:id])
if @product.update(product_params)
redirect_to :root
else
render 'edit'
end
end
我正在使用Paperclip上传图片。我尝试做了与 New Action 相同的事情,但是不是更新图像,而是上传了新的图像。
编辑:
product_params:
def product_params
params.require(:product).permit(:title, :info_item, :description, :price, :subcategory_id, :category_id, :images_attributes => [:image])
end