Вы можете обойти это с помощью метода Tag
, чтобы подделать другую сторону ассоциации
class BlogPost
include Mongoid::Document
field :title
references_many :tags, :stored_as => :array, :inverse_of => :blog_posts
end
class Tag
include Mongoid::Document
field :name
def blog_posts
# will match all BlogPost records where the tag_ids array contains self.id
BlogPost.where(:tag_ids => self.id)
end
end
Очевидно, что это не так полнофункционально, как :references_many
, но вы также можете подделать другие аспекты отношения «многие ко многим». Например, если вы хотите присвоить тегу новый blog_post, вы можете добавить простой create_blog_post
метод к Tag
.
Для многих реальных ситуаций такой подход практичен, если вы придерживаетесь простых методов и не увлекаетесь.