RDBMSのテーブルスキーマから自動的にリレーションを識別してActiveRecordのモデル間の関連付けを行なってくれるというもの。これを使えばhas_one
やhas_many
、belongs_to
による宣言を行う必要がなくなる。
ActiveRecordのログを見ると、どのように識別されているかが書きだされている。
[schema_associations] Post.has_one :comment, :class_name=>"Comment", :foreign_key=>"post_id"
ただし"one-to-one"と"one-to-many"の親側は自分が単一の子を持っているのか、それとも複数の子を持っているのかが外部キー名からのみでは判断できない。このため、has_one
による"one-to-one"のリレーションの場合には外部キーにユニークインデックスをはるか、もしくは通常通りhas_one
で宣言をする必要があるので要注意。
# Post has_one Comment create_table :posts do |t| end create_table :comments do |t| t.integer post_id, :index => :unique # (using the :index option provided by schema_plus ) end class Post < ActiveRecord::Base # has_one :comment end class Comment < ActiveReocrd::Base # belongs_to :post end