ruby 2.1.1p76(2014-02-24修订版45161)
Rails 4.1.0.rc1
postgres 9.3,使用宝石:
gem 'carrierwave'
和gem 'mini_magick'
我遇到的问题是因为未知原因上传的图片宽度和高度没有保存到数据库中(虽然没有after :store, :set_image_geometry
facebook url和twitter url正在正确保存(使用相同的形式,相同的hstore列))
schema.rb - 我要存储avatar_height和avatar_width
的列 create_table "users", force: true do |t|
...
t.hstore "settings", default: {}, null: false
end
avataruploader.rb
include CarrierWave::MiniMagick
after :store, :set_image_geometry
...
def set_image_geometry version
if self.file.present? && File.exist?(self.file.path)
img = MiniMagick::Image.open(self.file.path)
self.model.settings['avatar_width'] = img['width']
self.model.settings['avatar_height'] = img['height']
binding.pry
self.model.save
end
end
...
settings_controller.rb
private
def user_params
params.require(:user).permit(:avatar, :remove_avatar, :avatar_cache, settings: [:facebook_url, :twitter_url, :avatar_width, :avatar_height])
end
除了保存图像的宽度和高度之外的所有内容都是有意的,我附加了控制台日志的一部分:
35: def set_image_geometry version
36: if self.file.present? && File.exist?(self.file.path)
37: img = MiniMagick::Image.open(self.file.path)
38: self.model.settings['avatar_width'] = img['width'].to_s
39: self.model.settings['avatar_height'] = img['height'].to_s
=> 40: binding.pry
41: self.model.save
42: end
43: end
[1] pry(#<AvatarUploader::Uploader70137750643660>)> self.model.settings
=> {"facebook_url"=>"",
"twitter_url"=>"",
"avatar_width"=>80,
"avatar_height"=>58}
我尝试使用.to_s并且没有使用img [&#39; width&#39;],两者都无效
答案 0 :(得分:0)
没有做任何改动(用git diff检查)代码开始奇迹般地按照
的方式工作仍然不知道导致问题的原因,因此没有将问题标记为已回答