【发布时间】:2015-01-13 09:17:46
【问题描述】:
我是 Ruby on Rails 的新手。现在我想在控制器中一次保存 3 张图像。我在互联网上进行了更多研究,但我仍然没有找到答案并且不知道该怎么做?
- 我的数据库有一些字段:id (int), product_id (int), link_photo (text)
这意味着我可以使用一个产品 ID 存储 3 条图像记录(一个产品在数据库中的 3 行)
- 在视图层,我输入了上传文件
<div class="form-group <%= has_error?(@photo,"link_photo") %>"> <label for="pictures"><%= I18n.t("farms.pictures") %></label> <%= file_field :photo, :link_photo_first, class:"filestyle", accept:"image/png,image/jpeg" %><br/> <%= file_field :photo, :link_photo_second, class:"filestyle", accept:"image/png,image/jpeg" %><br/> <%= file_field :photo, :link_photo_third, class:"filestyle", accept:"image/png,image/jpeg" %> </div>
-
在控制器中:
# Save the first photo if !params[:photo][:link_photo_first].nil? @photo.link_photo = params[:photo][:link_photo_first] @photo.save end # Save the second photo if !params[:photo][:link_photo_second].nil? @photo.link_photo = params[:photo][:link_photo_second] @photo.save end # Save the third photo if !params[:photo][:link_photo_third].nil? @photo.link_photo = params[:photo][:link_photo_third] @photo.save end
但是如果像上面这样的代码一开始只能存储一条记录。 请帮我如何保存上面的3张图片。谢谢!
=======================
更新:
感谢大家的回复。我知道它的原因是:在下次保存之前需要再次更新@photo 变量。 也许有很多解决方案来解决它,但我编辑如下,它可以运行正常:
如下修复:在保存前添加@photo = Photo.create
保存第一张照片
if !params[:photo][:link_photo_first].nil? @photo = Photo.create @photo.product_id = @product.id @photo.link_photo = params[:photo][:link_photo_first] @photo.save end # Save the second photo if !params[:photo][:link_photo_second].nil? @photo = Photo.create @photo.product_id = @product.id @photo.link_photo = params[:photo][:link_photo_second] @photo.save end # Save the third photo if !params[:photo][:link_photo_third].nil? @photo = Photo.create @photo.product_id = @product.id @photo.link_photo = params[:photo][:link_photo_third] @photo.save end
【问题讨论】:
-
需要在这里展示你的模型。一张照片可以有3个
link_photo吗? -
为什么不使用嵌套形式?,您可以在 railscasts 上观看 Nested Model Form 剧集
标签: ruby-on-rails ruby database image store