【问题标题】:rails carrierwave image upload selects files but inserts nil into databaserailscarrierwave图像上传选择文件但将nil插入数据库
【发布时间】:2015-10-04 20:51:49
【问题描述】:

在此先感谢大家的帮助。我正在使用 rails 4 应用程序,并希望使用 CarrierWave 上传多个图像文件。我的表单有效,但提交后唯一更新到数据库的是一条新记录,其中图像字段为 nil。

这是提交时的服务器日志(删节)

Parameters: "property"=>{"name"=>"Windsong Ranch"}, 
"images"=>["53a2135761af0826.jpg", "53a2137620ecc597.jpg"], "commit"=>"Edit Property Changes", "id"=>"3"}

当它保存到数据库时

INSERT INTO "propimages" ("image", "property_id", "created_at", "updated_at") VALUES (?, ?, ?, ?)  [["image", nil], ["property_id", 3], ["created_at", "2015-07-15 16:42:41.607696"], ["updated_at", "2015-07-15 16:42:41.607696"]]

这是表格(节选)

<%= form_for @prop do |f| %>
  <p>
    <%= f.label :name %>
    <%= f.text_field :name, class: 'form-control', required: true %>
  </p>
 <p>Upload Images<br>
    <%= file_field_tag "images[]", type: :file, :multiple => true %>
  </p>
  <p>
  <%= f.submit "Edit Property Changes", class: 'btn btn-success' %>
  </p>
<% end %>

image_uploader.rb

  class ImageUploader < CarrierWave::Uploader::Base

  include CarrierWave::MiniMagick

  storage :fog

  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

  process :resize_to_fill => [1000, nil]

  version :thumb do
    process resize_to_fill: [100, nil]
  end

  def extension_white_list
    %w(jpg jpeg gif png)
  end


end

propimage.rb

class Propimage < ActiveRecord::Base
  belongs_to :property
  mount_uploader :image, ImageUploader
end

properties_controller.rb

def create
@prop = Property.create(property_params)
  if @prop.save

    if params[:images]
      params[:images].each { |image|
        @prop.propimages.create(image: image)
      }
    end
    redirect_to @prop
  else
    flash[:alert] = "error creating Property"
    render :new
  end
end

def update
  @prop = Property.find(params[:id])
  if @prop.update_attributes(property_params)
    if params[:images]
        params[:images].each { |image|
            @prop.propimages.create(image: image)
        }
    end
    flash[:notice] = "Update successful"
    redirect_to property_path
  else
    flash[:notice] = "Error updating Sponsor"
    render :new
  end
end
  def property_params
    params.require(:property).permit(:name, :purchase_price, :min_investment, :overview, :targeted_irr, :targeted_hold_period, :targeted_yield, :address_street, :address_city, :address_state, :address_zipcode, :sponsor_id)
  end

propimages_controller

  def create
    @propimage = Propimage.new(propimages_params)
    @propimage.save
  end
 private
  def propimages_params
    params.require(:propimage).permit(:image, :property_id)
  end

【问题讨论】:

  • 请发布您的property_params 方法。
  • 已更新以包含参数,谢谢
  • 尝试propimages.create(image: image, property_id: @prop.id) 而不是@prop.propimages.create(image: image)。如果这不起作用,请尝试将if params[:images] params[:images].each { |image| @prop.propimages.create(image: image) } end 移动到if @prop.save 上方
  • 您当前是否正在更新表单?
  • 同样的事情发生在更新和新的,图像在参数中,然后它们是零。没有任何东西被推送到 S3。进行这些更改的结果与以前相同,但感谢您的建议。

标签: ruby-on-rails ruby file-upload carrierwave


【解决方案1】:

您正在检查“图像”属性,但您不允许请求发送它:

params.require(:propimage).permit(:image, :property_id)

所以尝试使用:

params.require(:propimage).permit(:image, :images, :property_id)

PS:不过你真的应该重构这段代码。

【讨论】:

  • 你的答案是错误的。 :images 不属于propimage,只有:image 属于。
  • 那没有这样做,和以前一样的问题,它通过参数带来了它,但是当它拆分两条记录并将 nil 插入图像字段时。不过感谢您的帮助。
【解决方案2】:

除非有一个我没有看到的 ImageMagick 更新,这是可能的,'nil' 参数在你的 image_uploader.rb 中是无效的

  process :resize_to_fill => [1000, nil]

  version :thumb do
    process resize_to_fill: [100, nil]
  end

您必须提供一个高度参数。我不认为你可以通过将它设为 nil 来默认它。测试起来很容易。

  process :resize_to_fill => [1000, 1000]

  version :thumb do
    process resize_to_fill: [100, 100]
  end

【讨论】:

  • 感谢您的建议,我试过了,但没有解决问题。但我认为问题出在上传者的某个地方。我有另一个项目使用 :resize_to_fit =>[nil, 300] 所以我知道它是合理的。
  • 不用担心。 'nil' 在这里作为参数做什么?我在 ImageMagick 规范中找不到它。一直在寻找有趣的未发布功能。
  • 在我的上一个项目中,300px 是我的行高,但用户图像具有不同的纵横比。 'nil' 让宽度为保持该纵横比所需的任何值。
  • 好的。凉爽的。感谢您跟进并告知我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-16
  • 2013-03-07
  • 2021-06-14
  • 2013-07-29
  • 2019-09-12
相关资源
最近更新 更多