1. やること

/* 私の備忘録的なプロジェクトです。 */

今回は「モデル名.find_by_sql( )」で「生のSQL」を書かずに
Active Recordの「関連付け」(アソシエーション: association)で INNER JOINLEFT JOIN を行います。

<注事事項>
・テーブル定義の時点でカラム名(???_id)※1を正しく設定しないと動作しません。
・各モデルもbelongs_to、has_many、has_oneなどの関連付けを行わないと動作しません。
※1 関連対象のテーブル名の単数形に_idを付与する。(例)play_owner_id、play_category_id、play_article_id

2.テーブル(INNER JOIN用)

複数のRailsデモプロジェクトが同時起動しているのでテーブル名の接頭語に「 play_ 」を付与しています。

飼い主(play_owners)
猫(play_cats)
都道府県(play_prefectures)

3.テーブル(LEFT JOIN用)

カテゴリ(play_categories)
記事(play_articles)
アクセス数(play_accesses)
著者(play_authors)

4. モデル

--- INNER JOIN ---
※has_oneのモデル名は単数形
※ココのhas_oneはhas_many、belongs_toに変更可能

// play_owner.rb
class PlayOwner < ApplicationRecord
  has_one :play_cat
  has_one :play_prefecture  
end

// play_cat.rb
class PlayCat < ApplicationRecord
end

// play_prefecture.rb
class PlayPrefecture < ApplicationRecord
end

--- LEFT JOIN ---
※モデル名の単数形、複数形に注意

// play_category.rb
class PlayCategory < ApplicationRecord
   has_many :play_articles
end

// play_article.rb
class PlayArticle < ApplicationRecord
  belongs_to :play_category
  has_many :play_accesses
  has_many :play_authors  
end

// play_access.rb
class PlayAccess < ApplicationRecord
  belongs_to :play_article
end

// play_author.rb
class PlayAuthor < ApplicationRecord
  belongs_to :play_article
end

5. 参考サイト

<Active Record の関連付け>
Active Recordの関連付け(アソシエーション: association) (Railsガイド)

<Active RecordのDB操作>
RailsのActive Recordの解説&メソッドまとめ (Qiita)
ActiveRecord CRUDサンプル (Qiita)