0

我对rails有点陌生,所以请原谅这个愚蠢的问题。

我在 Rails 中有一个使用 mongoid 的博客类型应用程序,它有一个用户部分和一个评论部分。(评论嵌入在文章中)。所以我的评论控制器的删除方法遇到了问题。为了删除它们,我遍历我的集合,并查找用户单击的 id 的位置,params[:id] 等于数据库中的 id,comment.id。使用打印语句,我发现这确实有效,并且两个 id 应该相等。但是,由于某种原因,当我在 rails 中使用等于运算符 (==) 时,它会将注释注册为 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 
4

1 回答 1

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。

于 2012-05-03T09:13:37.560 回答