【问题标题】:Ruby on Rails - save 3 values with one timesRuby on Rails - 一次保存 3 个值
【发布时间】: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


【解决方案1】:

在您的代码中,您不会更改 @photo 变量,这意味着您在每个 .save 操作之后覆盖同一行。您需要做的是每次初始化新模型实例,例如

  # Save the first photo
  if !params[:photo][:link_photo_first].nil?
    @photo = YourModel.new(params)
    @photo.link_photo = params[:photo][:link_photo_first]
    @photo.save
  end

  # Save the second photo
  if !params[:photo][:link_photo_second].nil?
    @photo = YourModel.new(params)
    @photo.link_photo = params[:photo][:link_photo_second]
    @photo.save
  end

  # Save the third photo
  if !params[:photo][:link_photo_third].nil?
    @photo = YourModel.new(params)
    @photo.link_photo = params[:photo][:link_photo_third]
    @photo.save
  end

【讨论】:

  • 谢谢。你说得对。我像上面一样更新了我的代码!
猜你喜欢
  • 1970-01-01
  • 2016-02-10
  • 2019-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多