Ruby on Rails 13章画像のアップロード

Ruby on Rails 13章をやりました。

●アップロード部品
当然,ビュー>form_forの中に書く。
file_fieldがアップロード部品、リクエストは:picture
<%= f.file_field :picture %>

サーバサイドでは、params[:picture]でその画像のIDを扱える。

ビューでの画像ドローは、
image_tag micropost.picture.url でよい。(nilの場合はヌルポなので注意。micropost.picture?)

テストでは、fixture_file_upload( local_file_path, ‘image/png’ )
であげる

●バリデーション
部品レベルでのバリデーションは、
picture_uploader.rbにかける。

デフォルトでは下記がコメントアウトされているので外す。
def extension_whitelist
%w(jpg jpeg gif png)
end

ファイルサイズは、micropostモデルに定義する。
ポイント:独自バリデートの定義方法、エラーの立て方

validate :hogehoge
:
private
def hogehoge
errors.add( :picture, “hoge” ) if self.picture.size > 5.megabytes
end

●クライアント側のバリデート

<%= f.file_field :picture, accept: ‘image/jpeg, image/gif, image/png’ %>
→ファイルチューザを起動したときに選択できるファイルが制限。

あとはjavascriptで実行する。

パーシャルの中に直にスクリプトをかく。

●画像のリサイズツール
imageMagick
→gemの定義にmini_magickがある。これは、imageMagickとrubyを
つなぐツールらしい。
→imageMagickをyumか何かで入れないとmini_magickが入ってもエラー

gem ‘mini_magick’,’4.7.0′

uploaders/picture_uploade.rbに下記がコメントアウトされているので外す。
include CarrierWave::MiniMagick

いろいろなオプション
https://www.rdoc.info/github/jnicklas/carrierwave/CarrierWave/MiniMagick

#resize_to_fit
Resize the image to fit within the specified dimensions while retaining the original aspect ratio. The image may be shorter or narrower than specified in the smaller dimension but will not be larger than the specified values.

Google翻訳:
元の縦横比を維持しながら、指定した寸法に収まるように画像のサイズを変更します。
画像は、小さい方の寸法で指定されたものより短くても狭くてもかまいませんが、
指定された値より大きくなることはありません。

#resize_to_limit
Resize the image to fit within the specified dimensions while retaining the original aspect ratio. Will only resize the image if it is larger than the specified dimensions. The resulting image may be shorter or narrower than specified in the smaller dimension but will not be larger than the specified values.

Google翻訳:
元の縦横比を維持しながら、指定した寸法に収まるように画像のサイズを変更します。
指定された寸法よりも大きい場合にのみ、画像のサイズを変更します。
結果の画像は、小さい方の寸法で指定されたものよりも短いか狭い場合がありますが、
指定された値より大きくなることはありません。

今回はlimitのほう。

●本番環境での画像の保存先

uploaders/picture_uploader.rbに、環境を判断するIF分岐
→productionなら :fog

ファイルの実体は、AWSのS3に。

●リポジトリにアップロードしたファイルが含まれてしまう
# アップロードされたテスト画像を無視する
/public/uploads

コメントを残す

メールアドレスが公開されることはありません。