2016-02-24 3 views
1

Я пытаюсь создать кнопку на странице show, которая позволит пользователям перемещаться между различными комментариями.Ruby on Rails: Навигация между комментариями

И по какой-то причине я продолжаю получать либо article :id, либо comment :id не удалось найти.

Любая идея, почему это происходит?

#comment.rb 

def self.next(comment, key = :id) 
    self.where("#{key} > ?", comment.send(key)).first 
end 


#comments_controller.rb 
class CommentsController < ApplicationController 

    before_action :find_article 
    before_action :find_comment 

    def next_comment 
    @next_comment = @scope.next(@comment) 
    end 

    def scope 
    @scope = @article.comments 
    end 
end 

#comments/show.html.haml 
= link_to "Next Comment", comments_next_comment_path(@next_comment) 

EDIT: Проблема была в моих маршрутах, которые теперь исправлены. Но теперь я получаю следующее сообщение об ошибке:

undefined method "next" for nil:NilClass 

EDIT 2:

Вот журнал - и URL идет в http://localhost:3000/articles/14/comments/56/next_comment

Теперь не вызывает каких-либо ошибок, а просто отображает пустой страницы вместо того, чтобы идти к следующему комментарию URL, который http://localhost:3000/articles/14/comments/70

Parameters: {"article_id"=>"14", "id"=>"56"} 
    Article Load (0.2ms) SELECT "articles".* FROM "articles" WHERE "articles"."id" = ? LIMIT 1 [["id", 14]] 
    Comment Load (0.1ms) SELECT "comments".* FROM "comments" WHERE "comments"."id" = ? LIMIT 1 [["id", 56]] 
    Rendered comments/next_comments.html.haml within layouts/application (0.2ms) 
+0

Можете ли вы предоставить более подробную информацию о том, где возникает ошибка? Является ли это одним из методов 'before_action' или где-то еще? –

+0

Может ли это произойти, потому что следующего комментария нет, т. Е. Вы нажали следующий комментарий? Или это происходит повсюду? – SRack

+0

См. Править выше. – Liroy

ответ

1

переменная экземпляра @scope является undefined (и поэтому nil) перед тем, как вы его используете. Просто измените его на следующее, и оно должно работать.

def next_comment 
    @next_comment = scope.next(@comment) 
end 

def scope 
    @scope ||= @article.comments 
end 
+0

ahh, nope! Это не решило. – Liroy

+0

Он работает в консоли btw ... – Liroy

+0

См. EDIT 2. – Liroy