moduleClassMethods defhas_many_documents(association_name, options = {}) class_eval %< def #{association_name} #{association_name.to_s.singularize.classify}.where(#{name.underscore}_id: id) end > end end end
included do defself.belongs_to_record(association_name, options={}) association_class = options[:class_name] || association_name.to_s.singularize.classify class_eval %< field :#{association_name}_id, type: Integer index(#{association_name}_id: 1) def #{association_name} @#{association_name} ||= #{association_class}.where(id: #{association_name}_id).first if #{association_name}_id end def #{association_name}=(object) @#{association_name} = object self.#{association_name}_id = object.try :id end > end end end end
现在你就可以在 ActiveRecord models 和 Mongoid documents 里定义 1:N 的关系了: