paper clipでurlから画像を取得する

よくある(?)urlを入力して、画像を入れるシステムです。

どうやればできるんだ?とか思っていましたが、paper clipで標準でありました。

使い方

参考

github.com

公式にすでにやり方が書いてあります。

class User < ActiveRecord::Base
  attr_reader :avatar_remote_url
  has_attached_file :avatar

  def avatar_remote_url=(url_value)
    self.avatar = URI.parse(url_value)
    # Assuming url_value is http://example.com/photos/face.png
    # avatar_file_name == "face.png"
    # avatar_content_type == "image/png"
    @avatar_remote_url = url_value
  end
end

単純に画像を保存する場所にparseした urlをぶち込むようになっているので、自分はこうしました。

class Image < ActiveRecord::Base
  has_attached_file :image, styles: { medium: '300x300>', thumb: '100x100>' }
  validates_attachment :image,
                       content_type: { content_type: ['image/jpg',
                                                      'image/jpeg',
                                                      'image/png',
                                                      'image/gif'] }

  def remote_url(url)
    return if validate_url(url)
    self.image = URI.parse(url)
  end

  def validate_url(url)
    unless url =~ URI::regexp
      errors.add(:image, 'URLがおかしいです')
    end
  end
end

urlのvalidationだけはしておきました。

urlのvalidationの書き方が、これ以上は思いつかなかったので、もっといい書き方があったら教えてくださいm( )m