よくある(?)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