使用MongoID在Rails中标记的好方法

时间:2011-03-28 10:44:15

标签: ruby-on-rails-3 mongodb mongoid tagging

使用MongoID标记Rails的好方法是什么?

似乎只是在文档中添加哈希或数组非常简单,但我不确定这是否是最好的方法。

也许有些宝石?或者是嵌套文档的简单技巧?

4 个答案:

答案 0 :(得分:4)

目前,我使用了一种非常简单的方法,效果非常好:只需要包含一个Array字段。

#app/models/image.rb
class Image
  include Mongoid::Document
  include Mongoid::Timestamps

  field :message, :type => String
  field :tags, :type => Array

  def self.images_for tag
    Image.any_in(:tags => [tag])
  end
end

#routes.rb
match "tag/:tag" => "images#tag"

#/app/controller/images_controller.rb
class ImagesController < ApplicationController
  # GET /tag
  # GET /tag.xml
  def tag
    @images = Image.images_for params[:tag]

    respond_to do |format|
      format.html { render "index" }
      format.xml  { render :xml => @images }
    end
  end
end

这很有效,但我仍然对Image.any_in map / reduce的性能有点怀疑。我认为可能有一个更好的解决方案,但尚未找到它。

答案 1 :(得分:3)

试试mongoid_taggable gem。它确实想要你正在寻找。

答案 2 :(得分:3)

mongoid-tags-arent-hard宝石似乎比我见过的其他宝石更有能力(并且更积极地维护)。

答案 3 :(得分:1)

这里是地图/缩减和实时聚合策略的“可扩展”解决方案mongoid_taggable_with_context