Rails控制器ID等于

时间:2012-05-03 09:06:36

标签: ruby-on-rails

我对铁轨有点新意,所以请原谅这个愚蠢的问题。

我在rails中使用具有用户部分和评论部分的mongoid的博客类型应用程序。 (评论嵌入在文章中)。所以我的评论控制器的删除方法有问题。为了删除它们,我遍历我的集合,并查找用户单击的id,params [:id]等于数据库中的id,comment.id。使用print语句,我能够发现这确实有效,并且两个id应该相等。但是,出于某些原因,当我在rails中使用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 个答案:

答案 0 :(得分:1)

comment.id是一个Bson对象,params[:id]是一个字符串。

它们在您打印时匹配,因为显示的内容为comment.id.to_s

无论如何你宁愿这样做:

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

或者:

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

我不确定Mongoid。