2011-02-18 6 views
0

포함 된 문서를 추가하는 데 문제가 있습니다. 사용자에게 삽입 된 태그를 추가하려고합니다. 나는 새 태그를 만들려고 할 때포함 된 문서가 추가되지 않음

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 

이 서버에 출력됩니다.

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 

문제가 무엇인지, 어디에서 시작해야하는지 잘 모르겠습니다. 실제로 사용자가 발견 된 후 태그에 업데이트가 수행되고 있지만 성공하지 못한 것처럼 보입니다.

감사

모델의 태그 클래스는 사용자의 내부에 내장되어
+0

업데이트 명령이 정상적으로 처리됩니다 ... 컨트롤러 완료 후 사용자 문서는 어떻게 보이나요? mongodb.log에 오류가 있습니까? – jared

+0

사용자 문서를 확인하지 않고 작동 중입니다. 나는 태그를위한 별도의 "테이블"을 가지고 있었고 거기에있을 것이라고 생각했다. 실제로 문서를 임베딩 한 사실을 몰랐습니다. 감사. 그 개념을 대답에서 설명하고 싶다면 나는 당신에게 rep를 줄 것이다. –

답변

1

합니다 (embeds_many 협회를 통해)보다는 자신의 테이블. MongoID를 사용

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

, 당신은 또한 태그 "references_many"와 "embeds_many"를 대체하여 자신의 모음에 표시 할 수 있습니다 : 그래서 컨트롤러에서 업데이트 다음, 다음과 같은 식으로되어 있어야한다.

위의 설명에서 berek-bryan이 태그가 추가되는 위치와 관련이 있다는 것을 알 수 있습니다. 그는 태그가 자체 수집 물에 추가 될 것을 기대 했으므로 질문이됩니다. 사실, 태그는 사용자 컬렉션에 바로 추가되었습니다.

관련 문제