refactored has many, fix for belongs-to dirty check