paper clipでurlから画像を取得する
よくある(?)urlを入力して、画像を入れるシステムです。
どうやればできるんだ?とか思っていましたが、paper clip
で標準でありました。
使い方
参考
公式にすでにやり方が書いてあります。
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