2012-05-03 4 views
0

나는 레일에 조금 새로운 것이므로 noobish 질문을 용서하십시오.레일 컨트롤러 id가 같음

사용자 섹션과 댓글 섹션이있는 mongoid를 사용하는 레일에 블로그 유형 응용 프로그램이 있습니다. (주석은 기사 내에 포함되어 있습니다). 그래서 내 의견 컨트롤러의 삭제 방법에 문제가있었습니다. 그들을 삭제하려면 내 컬렉션을 탐색하고 사용자가 클릭 한 ID를 찾고 params [: id]는 데이터베이스의 ID 인 comment.id와 같습니다. print 문을 사용하여이 작업이 가능하고 두 ID가 동일해야 함을 알 수있었습니다. 그러나 레일즈에서 equals 연산자 (==)를 사용할 때 어떤 이유 때문에 주석을 nil로 등록합니다.

도움이 될 것입니다.

def destroy 
    @article = Article.find(params[:article_id]) 
    logger.debug(@article) 
    @article.comments.each do |comment| 
     logger.debug(comment) 
     print comment.id. 
     print ", " 
     print params[:id] 
     print " | " 

     if comment.id.equal? params[:id] 
      comment.destroy unless comment.nil? 

     end 
    end 
    respond_to do |format| 
     format.html { redirect_to "/" } 
     format.js 
    end 
end 

답변

1

comment.idparams[:id]는 문자열하는 Bson 개체입니다.

@article.comments.where(:id => params[:id]).first 

또는를 :

@article.comments.where(:_id => params[:id]).first 

내가 Mongoid에 대한 확실하지 않다 무엇을 표시하는 comment.id.to_s

때문에 당신은 어쨌든 당신이 대신 할 거라고 인쇄 할 때

그들은 일치합니다.

+0

"# {comment.id.inspect}, # {params [: id] .inspect} |"는 id가 정수이고 param이 문자열 인 차이점을 보여줍니다. –

+0

@MarlinPierce id in mongoid는 BSON 객체입니다. – apneadiving

+0

후자는 몽구스에서 작동합니다. Ruby 1.9 해시 구문을 사용하여 @ article.comments.where (_id : params [: id]). 먼저 – novemberkilo