&tag(Rails/モデル);
*目次 [#m834da88]
#contents
*関連ページ [#s6c9d29c]
-[[../マイグレーション]]

*参考情報 [#y691e92b]


*リレーション [#ocd095b5]

**参考情報 [#t2ea06fb]
-[[belongs_toとhas_one の違い|WEBデザイン Tips:http://blog.digital-squad.net/article/278843296.html]]
-[[Active Record の関連付け (アソシエーション) | Rails ガイド:http://railsguides.jp/association_basics.html]]…結局ここが一番分かりやすい。

**has_one [#m19450bf]
-注文に対し、注文明細が1:1で存在するような場合に使用する。
-例えばOrder, OrderDetail(order_id)の場合に、
#pre{{
class Order
  has_one :order_dtail
end
}}
-とすると、order.order_detailで自動的に読み込んでくれる(idで検索する)。
-条件を指定することもできる
#pre{{
class Order
  has_one :order_dtail, :through => :order_dtail, :conditions => ['order.active = ?', true]

end
}}
-order.order_detail = new_order_detailするとセットした瞬間にnew_order_detailがsaveされる。これはautosave無関係。
-これを避けるためには、new_order_detail = order.build_order_detail しなければならない(この場合、new_order_detail.order_id は自動でセットされる。保存されてない状態)。
**belongs_to [#ab4dfaa8]
-OrderDetailから、Orderを参照したいときに使う(単数で指定)。
#pre{{
class OrderDetail
  belongs_to :order
end
}}
-order_detailsにはorder_idが存在すること。

**has_one / belongs_toの考え方 [#sca68442]
-メイン側モデルはhas_one。
-従属側モデルはbelongs_to。
-従属モデルに外部キーが存在する。
-メイン側は、従属側の外部キーなど我関せずであると考えればわかりやすい?
-トランザクションテーブルからマスターテーブルを参照する場合、has_oneではなくてbelongs_toで参照することになる。この場合もマスターテーブルに外部キーを入れるわけにはいかないと考えると分かりやすい?(変更不可の大元情報だし)。


**has_many [#w3aa5f7e]

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS