- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有 RailsCasts 中描述的类似模型:
应用程序/模型/resident.rb:
class Resident < ActiveRecord::Base
include PhotoConcern
end
class Employee < ActiveRecord::Base
include PhotoConcern
end
module PhotoConcern
extend ActiveSupport::Concern
included do
mount_uploader :photo, PhotoUploader
attr_accessor :photo_crop_x, :photo_crop_y, :photo_crop_w, :photo_crop_h
after_save :crop_photo
def crop_photo
photo.recreate_versions! if photo_crop_x.present?
end
end
end
class PhotoUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
storage :file
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
version :cropped do
process :crop
end
version :thumb, from_version: :cropped do
process resize_to_fill: [100, 100]
end
version :avatar, from_version: :cropped do
process resize_to_fill: [200, 200]
end
def crop
return if model.photo_crop_x.blank?
resize_to_limit(500, nil)
resize_to_fit(500, nil)
manipulate! do |img|
size = model.photo_crop_w << 'x' << model.photo_crop_h
offset = '+' << model.photo_crop_x << '+' << model.photo_crop_y
img.crop("#{size}#{offset}")
img
end
end
end
= image_tag (@employee.photo.present? ? @employee.photo.url(:avatar) : "client_#{@employee.sex}.png"), class: 'img-circle img-responsive'
save!
在我的员工的
after_save
再次因为有更多的钩子(Hook)不应该被调用两次。此外,PhotoConcern 包含在另一个类中。
最佳答案
In order to save the newly generated filename you have to call save! on the model after recreate_versions!.
recreate_versions!(*versions) ⇒ Object
Recreate versions and reprocess them. This can be used to recreate versions if their parameters somehow have changed.
*versions
如果没有省略,则
cached file
将被存储。
# File 'lib/carrierwave/uploader/versions.rb', line 216
def recreate_versions!(*versions)
# Some files could possibly not be stored on the local disk. This
# doesn't play nicely with processing. Make sure that we're only
# processing a cached file
#
# The call to store! will trigger the necessary callbacks to both
# process this version and all sub-versions
if versions.any?
file = sanitized_file if !cached?
# the file will be stored
store_versions!(file, versions)
else
cache! if !cached?
# If new_file is omitted, a previously cached file will be stored.
store!
end
store!
是什么意思做?
store!
store!(new_file = nil) ⇒ Object
Stores the file by passing it to this Uploader's storage engine. If new_file is omitted, a previously cached file will be stored
class PhotoUploader < CarrierWave::Uploader::Base
中。它使用
with_callbacks
使用回调
:store
存储您的文件.回调触发此方法。
# File 'lib/carrierwave/uploader/store.rb', line 53
def store!(new_file=nil)
cache!(new_file) if new_file && ((@cache_id != parent_cache_id) || @cache_id.nil?)
if !cache_only and @file and @cache_id
with_callbacks(:store, new_file) do
new_file = storage.store!(@file)
if delete_tmp_file_after_storage
@file.delete unless move_to_store
cache_storage.delete_dir!(cache_path(nil))
end
@file = new_file
@cache_id = nil
end
end
end
store_versions!
是什么意思方法呢?
def store_versions!(new_file, versions=nil)
if versions
active = Hash[active_versions]
versions.each { |v| active[v].try(:store!, new_file) } unless active.empty?
else
active_versions.each { |name, v| v.store!(new_file) }
end
end
after :store, :store_versions!
after :store, :my_method
解释回调是如何工作的在您的
version :low do
内 block ,您将执行
my_method
仅在
after :store
上回调(仅适用于该版本)。
:store
回调对应
store!
的执行.
@filename
属性?
recreate_versions!
如何编码文件名?
@filename
用方法
filename
定义在
lib/carrierwave/uploader/store.rb
##
# Override this in your Uploader to change the filename.
#
# Be careful using record ids as filenames. If the filename is stored in the database
# the record id will be nil when the filename is set. Don't use record ids unless you
# understand this limitation.
#
# Do not use the version_name in the filename, as it will prevent versions from being
# loaded correctly.
#
# === Returns
#
# [String] a filename
#
def filename
@filename
end
def filename
在使用
recreate_version!
重新创建版本时重新创建唯一的文件名.
save!
关于拨款
Carrierwave
回调,不会打扰您
Carrierwave
gem
关于ruby-on-rails - 载波 gem 。重新创建后如何重命名上传的图像版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48127126/
编辑:我的文件仅按照缓存而非 store_dir 的规定存储 我花了几个小时试图让它工作,Carrierwave 在本地工作,但在我的生产中,它们只保存在 Cache_dir 中,并且表单没有将我重定
在我的 rails 应用程序中,我使用 Carrierwave 在 Amazon S3 上上传图像。我想指向现有的 Amazon S3 图像,而无需重新上传图像。例如,如果我在 处有一个现有的 Ama
我有一个 发帖 模型和 播客模型。两个模型都有一个标题为:图像的属性。我正在使用一个 Carrierwave上传器(名为 ImageUploader)来处理这两种模型。在开始生产之前,我有两个问题。
您好,我正在关注 carrierwave documentation但是我必须把这部分放在哪里? u = User.new(params[:user]) u.save! u.avatars[0].ur
当前在Carrierwave中,在创建像这样的不同版本时上传了foo.png这样的文件之后: class ImageUploader [500, 500] end end 导致文件上传为: th
我有 RailsCasts 中描述的类似模型: 应用程序/模型/resident.rb: class Resident < ActiveRecord::Base include PhotoConc
这是一个类似的案例,但没有解决方案 CarrierWave extension_white_list doesn't seem to work Carrierwave 提供了一个功能 extensio
我想要 Carrierwave生成图像的几个版本,一个是 png 格式,一个是 jpeg 格式,但我似乎无法让它工作。我意识到这里和其他地方都提出了几个类似的问题,但我未能找到解决方案。粗略地说,这就
我正在通过设置 Model#filename = File.open(etc) 来测试我的文件上传对于带有 RSpec 的模型是否正确 当我的规范运行时,一切都很棒。但在测试套件完成后,文件仍保留在我
我有一个安装 Carrierwave uploader 的简单模型。 Ruby 版本 2.2.3、Ruby on Rails 4.2.4、Imagemagick 安装在 mac (10.11.1 El
我想下载在 aws s3 上上传的文件: 控制者 def download send_file my_file.url end 实际上我已经尝试了类似帖子中的所有代码: send_file o
我有一个 Catalog它有一个名为 file 的属性: class Catalog 但是当我单击该链接时,它只会给我一个路由错误 Routing Error No route matches [G
我有这个规范: post :create, :room_id => @room.id, :image => Rack::Test::UploadedFile.new(path, 'text/jpg')
看了好几篇相关的帖子和解决方案,还是想不通,还是返回“Excon::Errors::SocketError 在/postsgetaddrinfo: nodename 或 servname 提供,或
我有型号 Document : class Document true end 还有两个类继承自 Document : License : class License {"certificate"=
我已经成功安装了 Carrierwave。我可以从终端看到它:gem list carrierwave => *** LOCAL GEMS *** carrierwave (1.0.0.rc) 但我仍
我正在使用: - carrierwave 0.6.0 - rails 3.2.1 - mini_magick 3.4 - ruby 1.9.2p290 在上传图片的过程中,我想调整上传图片的大小: (
我想 stub carrierwave以防止它在我的测试期间在网络上获取图像。我将如何 stub 以实现这一目标? 我的爬虫解析远程网页,并将一个图像 url 保存到模型中。 Carrierwave
这里我有两个模型:User 和 Book用户有头像要上传,书有封面要上传我已阅读有关上传图片的 railscast,但我不知道应该如何处理不同类型的图片? (在这种情况下,用户的头像和书籍的封面) 我
我在尝试将 S3 服务与雾和 Jquery 文件上传 (https://github.com/blueimp/jQuery-File-Upload) 一起使用时遇到了这个问题 错误 Excon::Er
我是一名优秀的程序员,十分优秀!