Rails Tutorial 第3版 第11章

Ruby on Rails チュートリアル:実例を使って Rails を学ぼう の2周目です。
第11章ユーザーのマイクロポスト | Rails チュートリアル

第11章ユーザーのマイクロポスト

本格的にWebアプリっぽくなってきました。
carrierwave, mini_magick, fog や、今回も各種テストは参考になります。

paginateさせながらのテスト

@user.microposts.paginate(page: 1).each do |micropost|
  assert_match micropost.content, response.body
end

validation にファイル容量制限を入れる

  # model
  validate  :picture_size
  
  private

    def picture_size
      if picture.size > 5.megabytes
        errors.add(:picture, "should be less than 5MB")
      end
    end

acceptパラメータでuploadのファイルを制限する

<%= f.file_field :picture, accept: 'image/jpeg,image/gif,image/png' %>

jsでファイル容量の制御をする

onじゃなくbindで書いているところは気になりますが、まぁ本筋ではないので。

<script type="text/javascript">
  $('#micropost_picture').bind('change', function() {
    var size_in_megabytes = this.files[0].size/1024/1024;
    if (size_in_megabytes > 5) {
      alert('Maximum file size is 5MB. Please choose a smaller file.');
    }
  });
</script>

テスト時にcarrierwaveのresizeを無効化する

if Rails.env.test?
  CarrierWave.configure do |config|
    config.enable_processing = false
  end
end