2012-05-03 3 views
0

Я немного новичок в рельсах, поэтому прошу прощения за вопрос noobish.Rails Controller id Equals

У меня есть приложение типа блога в рельсах с использованием mongoid, в котором есть раздел пользователей и раздел комментариев. (Комментарии включены в статью). Поэтому у меня возникли проблемы с методом удаления моего контроллера комментариев. Чтобы удалить их, я просматриваю свою коллекцию и ищу, где идентификатор, который пользователь нажал, params [: id] равен id в базе данных comment.id. Используя заявления печати, я смог выяснить, что это работает и что два идентификатора должны быть равны. Однако по какой-то причине, когда я использую оператор equals (==) в 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 

ответ

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.

+0

print "# {comment.id.inspect}, # {params [: id] .inspect} |" покажет разницу между id как целым числом и параметром в виде строки. –

+0

@MarlinPierce id in mongoid - объекты BSON – apneadiving

+0

Последний работает в mongoid. Используя синтаксис хеша Ruby 1.9, @ article.comments.where (_id: params [: id]). Сначала – novemberkilo