次の不自然な例を考えてみましょう:
class Company < ActiveRecord::Base
has_many :projects
end
class Project < ActiveRecord::Base
belongs_to :company
end
c, p = Company.new, Project.new
c.projects << p
p.company => c
プロジェクトがコレクションに追加されると、会社への逆関連付けが Rails によって自動的に設定されます。残念ながら、これは Rails がこれを行うのに十分賢い唯一の機会です。反対側からの代入は、オブジェクトを逆コレクションに追加しません。
c, p = Company.new, Project.new
p.company = c
c.projects => []
多対多の関係は、自動逆参照割り当ても行いません。ActiveRecord と DataMapper の両方がこの動作を示します。これには技術的な理由がありますか?保存と再読み込みが発生する前に一貫した関連付けを行うと、特定のテスト ケースが大幅に高速化され、一般的に物事がよりクリーンになります。