图像的宽度和高度使用了carrierwave,而不是保存到hstore列,虽然.persisted?返回true

时间:2014-04-14 10:17:20

标签: ruby-on-rails postgresql carrierwave hstore minimagick

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列))

截屏视频:http://quick.as/dvvrhnjx

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;],两者都无效

1 个答案:

答案 0 :(得分:0)

没有做任何改动(用git diff检查)代码开始奇迹般地按照

的方式工作

仍然不知道导致问题的原因,因此没有将问题标记为已回答