rails - has_many through:
他対他 の関連を参照する
元々は他対他を直接参照できるようにするもの。
+-------+ +-----------+ +-----+ |Product| 1---n |OrderDetail| n---1 |Order| +-------+ +-----------+ +-----+
例えば、特定の Order中の Productを調べたい場合など。
class Product < ActiveRecord::Base has_many :order_details has_many :orders, through: :order_details end class Order < ActiveRecord::Base has_many :order_details has_many :products, through: :order_details end class OrderDetail < ActiveRecord::Base belongs_to :product belongs_to :order end
こうすると、
@orders = @product.orders
として参照できる
カスケードした関連を直接参照する
+----+ +----+ +-----+ |User| 1---n |Blog| 1---n |Entry| +----+ +----+ +-----+
User から Entry のアイテムを直接参照できるようにする。
class User < ActiveRecord::Base has_many :blogs has_many :entries, through: :blogs end class Blog < ActiveRecord::Base has_many :entries belongs_to :user end class Entry < ActiveRecord::Base belongs_to :blog end
次のように参照できる。
@user.entries
ただし、次のように作成することはできない。
@user.entries.create title: "ほげ"
1対多のカスケードとなっているため Blog が特定できない。
Blog の id を指定し追加する。
@blog = Blog.find @blog_id @blog.entries.create title: "ほげ"