経緯
習作としてQiitaを模した簡易版Webアプリを作成途中、オブジェクト指向を学ぶべく自作のクラスを作ることになったのでそのリファクタリングの経過を残す
前提
記事(Article)クラスが存在
環境
MacOS BigSur Ver11.5.2
Ruby 3.0.2
Rails 6.1.4.1
広告クラス作り方
- viewsにとりあえずの完成形を表示させてみる
 - controllersにコードを移して表示させてみる
 - modelsにコードを移して表示させてみる
 - adモデルを作ってarticleモデルから独立させてみる
(articleモデルの中に広告に関するメソッドがあるのは今後見づらいので) 
①viewsに画像リンクベタ貼り
広告となる画像を5つ用意
app/views/articles/show.html.erb
<img src="https://image.itmedia.co.jp/news/articles/2107/19/l_dy_cb_01.jpg">
<img src="https://encrypted-tbn0.gstatic.com/imagesq=tbn:ANd9GcTj0ph_lpduhRyThoqjOH_VKAU">
<img src="https://encrypted-tbn0.gstatic.com/imagesq=tbn:ANd9GcQQnu9xtX6vLjd9YbQyNthp6WsKkSqBm">
<img src="https://www20.a8.net/svt/bgt?aid=180313000005&wid=126&eno=01&mid=s000&mc=1">
<img src="https://encrypted-tbn0.gstatic.com/imagesq=tbn:ANd9GcQeTfxVxPVijk2pzmPKvCAU>
②-1controllersにもコードを分けて書いてみる
app/controllers/articles_controller.rb
def show
  @image1 = "https://image.itmedia.co.jp/news/articles/2107/19/l_dy_cb_01.jpg"
  @image2 = "https://encrypted-tbn0.gstatic.com/imagesq=tbn:ANd9GcTj0ph_lpduhRyThoqjOH_VKAU"
  @image3 = "https://encrypted-tbn0.gstatic.com/imagesq=tbn:ANd9GcQQnu9xtX6vLjd9YbQyNthp6WsKkSqBm"
  @image4 = "https://www20.a8.net/svt/bgt?aid=180313000005&wid=126&eno=01&mid=s000&mc=1"
  @image5 = "https://encrypted-tbn0.gstatic.com/imagesq=tbn:ANd9GcQeTfxVxPVijk2pzmPKvCAU"
end
app/views/articles/show.html.erb
<%= image_tag @image1 %>
<%= image_tag @image2 %>
<%= image_tag @image3 %>
<%= image_tag @image4 %>
<%= image_tag @image5 %>
②-2 リファクタリング
app/controllers/articles_controller.rb
def show
  image1 = "https://image.itmedia.co.jp/news/articles/2107/19/l_dy_cb_01.jpg"
  image2 = "https://encrypted-tbn0.gstatic.com/imagesq=tbn:ANd9GcTj0ph_lpduhRyThoqjOH_VKAU"
  image3 = "https://encrypted-tbn0.gstatic.com/imagesq=tbn:ANd9GcQQnu9xtX6vLjd9YbQyNthp6WsKkSqBm"
  image4 = "https://www20.a8.net/svt/bgt?aid=180313000005&wid=126&eno=01&mid=s000&mc=1"
  image5 = "https://encrypted-tbn0.gstatic.com/imagesq=tbn:ANd9GcQeTfxVxPVijk2pzmPKvCAU"
  @images = [image1, image2, image3, image4, image5]
end
app/views/articles/show.html.erb
<% @images.each do |image| %>
  <%= image_tag image %>
<% end %>
③modelsにもコードを分けて書いてみる
show_adsメソッドを作る
app/models/article.rb
class Article < ApplicationRecord
  def show_ads
     image1 = "https://image.itmedia.co.jp/news/articles/2107/19/l_dy_cb_01.jpg"
     image2 = "https://encrypted-tbn0.gstatic.com/imagesq=tbn:ANd9GcTj0ph_lpduhRyThoqjOH_VKAU"
     image3 = "https://encrypted-tbn0.gstatic.com/imagesq=tbn:ANd9GcQQnu9xtX6vLjd9YbQyNthp6WsKkSqBm"
     image4 = "https://www20.a8.net/svt/bgt?aid=180313000005&wid=126&eno=01&mid=s000&mc=1"
     image5 = "https://encrypted-tbn0.gstatic.com/imagesq=tbn:ANd9GcQeTfxVxPVijk2pzmPKvCAU"
     @images = [image1, image2, image3, image4, image5]
  end
end
app/controllers/articles_controller.rb
def show
  ads = Article.new
  @images = ads.show_ads
end
app/views/articles/show.html.erb
<% @images.each do |image| %>
  <%= image_tag image %>
<% end %>
④adモデルを作ってモデルを独立させる
- advertisementモデル作成
 - articleとのアソシエーションを定義
 
app/models/advertisement.rb
class Advertisement < ApplicationRecord
  belongs_to :article
  
  def show_ads
   image1 = "https://image.itmedia.co.jp/news/articles/2107/19/l_dy_cb_01.jpg"
   image2 = "https://encrypted-tbn0.gstatic.com/imagesq=tbn:ANd9GcTj0ph_lpduhRyThoqjOH_VKAU"
   image3 = "https://encrypted-tbn0.gstatic.com/imagesq=tbn:ANd9GcQQnu9xtX6vLjd9YbQyNthp6WsKkSqBm"
   image4 = "https://www20.a8.net/svt/bgt?aid=180313000005&wid=126&eno=01&mid=s000&mc=1"
   image5 = "https://encrypted-tbn0.gstatic.com/imagesq=tbn:ANd9GcQeTfxVxPVijk2pzmPKvCAU"
   @images = [image1, image2, image3, image4, image5]
  end
end
app/controllers/articles_controller.rb
def show
  ads = Advertisement.new
  @images = ads.show_ads
end
app/views/articles/show.html.erb
<% @images.each do |image| %>
  <%= image_tag image %>
<% end %>
参考