开发者

Embedded Document not being added

Having trouble adding an embedded document. I am trying to add a tag which is embedded in the user.

user.rb

class User
  include Mongoid::Document
  field :name

  validates_presence_of :name
  validates_uniqueness_of :name, :email, :case_sensitive => false      
  attr_accessible :name, :email, :password, :password_confirmation

  embeds_many :tags
  embeds_many :tasks

  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable
end

tag.rb

class Tag
  include Mongoid::Document
  field :name
  embedded_in :user, :inverse_of => :tags
  references_many :tasks
end

tags_controller.rb

  def create
    #@user = User.find(:first, :conditions => {:_id => "4d3ae09bf5c4930b2b000004"} )
    @user = current_user
    @tag = Tag.new(params[:tag])

    @user.tags << @tag
    @tag.save

    redirect_to @tag, :notice => "Tag created!" 
  end

This is the output to the server when I try to create a new tag.

Started POST "/tags" for 127.0.0.1 at 2011-02-18 13:46:03 -0500   
Processing by TagsController#create as HTML   Parameters: {"utf8"=>"✓", "authenticity_token"=>"6p+Jova7Hol2v5LRReSp2fhNJ967EwkeIzAWyrChQRE=", "tag"=>{开发者_如何学运维"name"=>"general"}, "commit"=>"Create Tag"} 
db['users'].find({:_id=>BSON::ObjectId('4d39cd63f5c4930708000001')}, {}).limit(-1) MONGODB 
db['users'].update({"_id"=>BSON::ObjectId('4d39cd63f5c4930708000001')}, {"$push"=>{"tags"=>{"name"=>"general", "_id"=>BSON::ObjectId('4d5ebe6bf5c493554d000002')}}}) Redirected to 
http://localhost:3000/tags/4d5ebe6bf5c493554d000002 Completed 302 Found in 5ms

Not really sure what the issue is or where to start. It actually looks like the user is found then an update is being made to tags but it is not successful.

Thanks


The Tags class in your model is embedded inside of user (via the embeds_many association), rather than a table on its own. So following the updates in your controller, you should have something like this:

> db.users.find() 
{ 
    _id: ObjectId('4d39cd63f5c4930708000001'),
    tags: [
        {
            _id: ObjectId('4d5ebe6bf5c493554d000002'),
            name: "General"
        }
    ]
}

Using MongoID, you can also have Tags appear in their own collection by replacing "embeds_many" with "references_many".

In the comments above, you'll see that the issue berek-bryan was having had to do with where the tag was being added. He expected the tag to be added in its own collection, hence the question. Actually, the tags were being added right into his users collection.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜