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
foreign_key_name = opts[:foreign_key_name]
if foreign_key_name
message = _(":foreign_key belongs_to(:many) option is " \
"deprecated since 1.1.0. Use :primary_key instead.")
ActiveSupport::Deprecation.warn(message)
opts[:primary_key_name] ||= foreign_key_name
end
opts[:primary_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