def belongs_to(association_id, options={})
validate_belongs_to_options(options)
klass = options[:class]
klass ||= (options[:class_name] || association_id.to_s).classify
foreign_key = options[:foreign_key]
primary_key = options[:primary_key]
many = options[:many]
set_associated_class(association_id, klass)
opts = {
:association_id => association_id,
:foreign_key_name => foreign_key,
:primary_key_name => primary_key,
:many => many,
:extend => options[:extend],
}
if opts[:many]
association_class = Association::BelongsToMany
opts[:foreign_key_name] ||= dn_attribute
else
association_class = Association::BelongsTo
opts[:foreign_key_name] ||= "#{association_id}_id"
before_save("if defined?(@\#{association_id})\nassociation = @\#{association_id}\nif association and association.updated?\nself[association.__send__(:primary_key)] =\nassociation[\#{opts[:foreign_key_name].dump}]\nend\nend\n")
end
association_accessor(association_id) do |target|
association_class.new(target, opts)
end
end