我已尝试按carrierwave gem自述文件中的建议实施多文件上传。
提供错误的行无法将nil转换为字符串'是
@event = Event.new(event_params)
来自我的创建动作。 <{1}}由
定义event_params
在表单视图中,文件字段由
指定params.require(:event).permit(:name, :description, ... lots of params ..., {images: []})
当我删除此行时,它会消除错误,但显然不会上传文件。即使我在此字段中选择了多个文件,也会发生错误。有谁知道出了什么问题?
<%= f.file_field :images, multiple: true %>
和
app/models/event.rb
class Event < ActiveRecord::Base
has_many :swipes
has_many :event_images
accepts_nested_attributes_for :event_images
mount_uploader :headerImage, HeaderImageUploader
mount_uploader :images, ImagesUploader
geocoded_by :full_street_address
after_validation :geocode, :if => :address_changed?
after_validation :reverse_geocode, :if => :latitude_changed?
# Event validations
validates :name, :presence => true, length: { in: 5..30 }
validates :title, :presence => true, length: { in: 5..60 }
validates :description, :presence => true, length: { in: 5..2500 }
validates :headerImage, :presence => true
validates :venue, :presence => true
validates :street_address, :presence => true
validates :post_code, :presence => true
validate :check_begin_time
validates :price, :presence => true
validates :host_name, :presence => true
def check_begin_time
if door_time.blank? and start_time.blank?
errors.add(:base, 'At least one of "door time" and "start time" must be filled in')
#one at least must be filled in, add a custom error message
return false
else
return true
end
end
def full_street_address
[venue, street_address, town, post_code, country].compact.join(', ')
end
def address_changed?
attrs = %w(venue street_address town country)
attrs.any?{|a| send "#{a}_changed?"}
end
end
这是我的表单发送的HTTP请求。
app/uploaders/images_uploader.rb
class ImagesUploader < CarrierWave::Uploader::Base
storage :file
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
end
答案 0 :(得分:0)
您需要正确设置CarrierWave目录:
CarrierWave.configure do |config|
config.root = File.expand_path '../public', __FILE__
end
答案 1 :(得分:0)
应该是:mount_uploaders :images, ImagesUploader
而不是mount_uploader