higan96技術メモ

https://github.com/higan96

paperclipでlocaleに関するエラーが出たので対処

Rails 4.0.3
paperclip 4.1.1

ファイルアップロードのライブラリとしてpaperclipを使っているのですが、 ファイルサイズについてのバリデーションをModelに加え、テストも加えたのですが、どうにもlocaleファイルが無いよ、とテストを走らせるとエラーが出てしまいました。

Failure/Error: it { should validate_attachment_size(:avatar).
I18n::MissingTranslationData:
translation missing: ja.number.human.storage_units.format

で、ソースを追うと、enについてのlocale fileしか無いのでエラーが出ている様子
github

#paperclip/lib/paperclip/locales/en.yml
en:
  errors:
    messages:
      in_between: "must be in between %{min} and %{max}"
      spoofed_media_type: "has an extension that does not match its contents"

  number:
    human:
      storage_units:
        format: "%n %u"
        units:
          byte:
            one:   "Byte"
            other: "Bytes"
          kb: "KB"
          mb: "MB"
          gb: "GB"
          tb: "TB"

まあ、特にenでも問題なさそうなんで、validates_attachment_size にlocaleオプションでenを設定して、解決しました。

#Model
validates_attachment_size :avatar, less_than: 1.megabytes

#Model
validates_attachment_size :avatar, less_than: 1.megabytes, locale: :en


追記:
https://github.com/svenfuchs/rails-i18n/
このへん入れるだけでも、localeオプション無しでエラーでなくなります。

#Model
validates_attachment_size :avatar, less_than: 1.megabytes