【发布时间】: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