tkymtk's blog

Ruby on Rails及びその周辺について調べたこと。Do whatever you want to do at your own pace.

アクティブレコード アソシエーション Active Record Associations まとめ 1

RailsGuides v4より Active Record Associations — Ruby on Rails Guides

Active Record Associations

  • アクティブレコードモデル間の関連の宣言の方法
  • アクティブレコードアソシエーションのそれぞれのタイプの理解の仕方
  • モデルに追加されたメソッドを、アソシエーションを作ることで使う方法

1. なぜアソシエーションか

なぜモデル間のアソシエーションが必要なのか。
  • コード中のよく使う操作をシンプルかつ簡単にすることができる。
アソシエーション機能ある・なし比較

モデルの宣言:
なし:
class Customer < ActiveRecord::Base
end

class Order < ActiveRecord::Base
end
あり:
class Customer < ActiveRecord::Base
  has_many :orders, dependent: :destroy
end
 
class Order < ActiveRecord::Base
  belongs_to :customer
end
既存の利用者に新しい注文を追加する:
なし:
@order = Order.create(order_date: Time.now, customer_id: @customer.id)
あり:
@order = @customer.orders.create(order_date: Time.now)
利用者を消して、その注文も必ず消去されるようにするには:
なし:
@orders = Order.where(customer_id: @customer.id)
@orders.each do |order|
  order.destroy
end
@customer.destroy
あり:
@customer.destroy
という用な感じになる

続く...

間違いがあれば、ご指摘下さると幸いです。