decorators/article_decorators.rb

module ArticleDecorator
def eye_catch_url(version = :origin)                      # 引数を渡す。 デフォルト値は origin
    if !eye_catch.attached? || eye_catch.metadata.blank?  # 画像がない場合、もしくは画像のメタデータがからの場合
      return '/images/eye_catch.jpg'                      # '/images/eye_catch.jpg' を返す
    end

    command = case version                  # version が、
              when :thumb                   # :thumb の場合
                { resize: '640x480' }
              when :lg                      # :lg の場合
                { resize: '1024x768' }
              when :ogp                     # :ogp の場合
                { resize: '120x630' }
              else
                false
              end

    command ? eye_catch.variant(command).processed : eye_catch  # commandがtrue の場合、条件分岐された結果に画像がリサイズされる。falseの場合、リサイズされず、eye_catch が返される
  end
end

[checkポイント]
・attached?: レシーバのオブジェクトに指定のファイルが紐付いていればtrueを返す。紐付いていなければ、falseを戻り値として返すメソッド。
・variant: 画像を変換する際に使われるメソッド。このメソッドを使うためには、image_processing gemをGemfileに追加する必要がある。
・processed: これを付けることで、すでにそのサイズで保存されて画像があれば、変換処理は行われず、即時にURLが返される。

===========================================================================

■アイキャッチ導入手順:

$ rails g migration AddColumnToArticles eyecatch_width:integer eyecatch_position:integer
✖️✖️✖️✖️✖️✖️✖️.add_column_to_articles.rb

class AddColumToArticles < ActiveRecord::Migration[5.2]
	def change
		add_column :articles, :eyecatch_width, :integer
		add_column :articles, :eyecatch_position, :integer, default: 0, null: false
	end
end

[checkポイント]
・defalt: 0: デフォルト値が設定されない場合、0になるよう設定します。
・null: false: NULLを許可しないよう設定します。
app/models/article.rb

enum eyecatch_align: { left: 0, center: 1, right: 2 }
validates :eyecatch_width, numericality: { less_than_or_equal_to: 700, greater_than_or_equal_to: 100 }, allow_blank: true

[checkポイント]
・先程カラムを追加したときに、0が中央になるよう設定したので、それに合わせて1が左、2を右に記入。

・**numericality**とはバリデーションヘルパーの一種で、属性に数値のみ保存できる役割を果たしている。
・**less_than_or_equal_to**: 指定された値と等しいか、それよりも小さくなければならないことを指定します。
・**greater_than_or_equal_to**: 指定された値と等しいか、それよりも大きくなければならないことを指定します。
config/locales/enums.ja.yml

ja:
	enums:
		article:
			eyecatch_position:
				left: '左寄せ'
				center: '中央'
				right: '右寄せ'
config/locales/activerecord.ja.yml

ja:
	activerecord:
		attributes:
			article:
				eyecatch_width: 'アイキャッチ幅'