モデルの関連付け/アソシエーション
belongs_to
has_one
has_many
has_and_belongs_to_many
参考:
Active Record の関連付け (アソシエーション) | Rails ガイド [公式]
belongs_to / has_one / has_many の簡単まとめ | 酒と涙とRubyとRailsと
Rails のリレーションのオプションでできること、まとめてみた。| ハッカーを目指す白Tのブログ
ActiveRecord::Associations
参考:
ActiveRecord::Associations::ClassMethods | Ruby on Rails API [Official]
ActiveRecord::Associations::CollectionProxy
参考:
ActiveRecord::Associations::CollectionProxy | Ruby on Rails API [Official]
実例
参考:
has_many と belongs_to のリレーションで データベースに保存する | RemoNote
has_many – belongs_to で都道府県データを持てるようにする | RemoNote
一対一の関連付け
参考:
Rails4 で1対1のリレーションをモデルに実装する | Rails Webook
一対多の関連付け
参考:
Rails のモデルと一対多のリレーションのまとめ | dev/mom0tomo
has_and_belongs_to_many
class Assembly < ApplicationRecord has_and_belongs_to_many :parts end class Part < ApplicationRecord has_and_belongs_to_many :assemblies end
参考:
has_and_belongs_to_many 関連付け | Rails ガイド [公式]
Rails 4 HABTM how to set multiple ids in console? – Stack Overflow
関連モデルの生成
参考:
モデルの関連付けで build を使う時のメソッド名 – GitHub Gist
has_many 関連付けに条件を付ける
参考:
has_many で関連元のオブジェクトに依存した条件を付けたいとき | falcon’s Diary
Use a scope by default on a Rails has_many relationship – Stack Overflow
has_many through 関連付け
参考:
has_many through で,class_name とか foreign_key をちゃんと復習してみる | PartyIX
Rails4 の has_many through で多対多のリレーションを実装する – Qiita
has_many through な関係で、複数レコードを new/create する時の書き方 – Qiita
Rails の has_many :through の多対多のモデルについて – teratail
How a has_many :through association works in practice | Duck Type Labs
When should one use a “has_many :through” relation in Rails? – Stack Overflow
save instance into join table – Stack Overflow
dependent オプション
レコードを削除する際の関連レコードの扱いを指定する。
:destroy
:関連レコードを同時に削除する (コールバックが呼ばれる):delete_all
:関連レコードを同時に削除する (コールバックは呼ばれない):nullify
:関連レコードにおける外部キーをNULL
にする:restrict_with_exception
:例外を発生させる (関連レコードが存在する場合は削除できない):restrict_with_error
:エラー情報を付与する (関連レコードが存在する場合は削除できない)nil
:何もしない (デフォルト)
参考:
ActiveRecord::has_many の dependent オプション | blog.sanojimaru.com
dependent: :restrict_with_error と :restrict_with_exception の違い – Qiita
ActiveRecord の :dependent 使い分けまとめ : destroy, :delete, :nullify|IT エンジニアのノマド生活
has_many の dependent オプションについて – Qiita
モデルを削除するときに同時に中間テーブルに存在するレコードも削除する has_many dependent: destroy | PG-Happy ブログ
has_many – ActiveRecord::Associations::ClassMethods | Ruby on Rails API [Official]
rails で dependent: : destroy を設定したのに削除されない – スタック・オーバーフロー
touch
関連レコードの更新日時を同時に更新する。
参考:
touch, touch, updated_at に touch – Qiita
touch オプションで updated_at を更新する | Murajun’s Style
delegate
メソッドを関連モデルに delegate
する。
参考:
has_many, through の逆の関連は delegate, to か has_one, through | Hack Your Design!
has_many でツリー状の関連付けを行う
参考:
ActiveRecord でツリー関係の関連を定義する | それは Books
polymorphic
class Picture < ApplicationRecord belongs_to :imageable, polymorphic: true end class Employee < ApplicationRecord has_many :pictures, as: :imageable end class Product < ApplicationRecord has_many :pictures, as: :imageable end
参考:
条件付きの関連付け
参考:
命名規則外のカラム名を使って関連付け (class_name)
class Book < ApplicationRecord belongs_to :writer, class_name: "Author", foreign_key: "author_id" end
参考:
has many – Rails has_many with alias name – Stack Overflow
関連付けを動的に生成する
参考:
Dynamically Defined has_many with odd behavior | GoRails
Dynamic class_name for has_many relations – Stack Overflow
Dynamic association generation in ActiveRecord – Code Review Stack Exchange
エンジンのモデルを関連付けする
参考:
Rails Engine でマウントする側のモデルとされる側のモデルの association | mmag
parndt/decorators: Manages the process of loading decorators into your Rails application – GitHub
エンジンのモデルを共有して使う
参考:
Rails の model を Engine で共有する (実験中) – Qiita
中間テーブルにおける組み合わせの重複
参考:
SQL の多対多リレーションを「集合」で扱う 翻訳 | TechRacho
AssociationRelation
参考:
ActiveRecord::AssociationRelation | Ruby on Rails API [Official]
rails/association_relation.rb at v5.2.2 · rails/rails – GitHub
BelongsTo
参考:
rails/belongs_to.rb at v6.0.0.rc1 · rails/rails – GitHub
ActiveRecord::Associations::CollectionProxy
参考:
ActiveRecord::Associations::CollectionProxy | Ruby on Rails API [Official]
STI / becomes
参考:
シングルテーブル継承 (STI) | Rails ガイド [公式]
Single Table Inheritance – Problems and solutions | Arkency Blog
becomes – ActiveRecord::Persistence | Ruby on Rails API [Official]
まとめ/チートシート
参考:
Associations – Rails models cheatsheet | Devhints
Tips
参考:
Non-standard ActiveRecord | Codeando con Ruby
Single Table Inheritance – Problems and solutions | Arkency Blog
has-many-with-set
参考:
ebobby/has-many-with-set: A smarter way to have many-to-many relationships – GitHub