Следующий пост обрывается при переходе на первую запись в блоге - PullRequest
0 голосов
/ 23 сентября 2018

Я даже не знаю, как сформулировать вопрос.У меня есть блог с фидом.Когда человек нажимает на страницу показа, я хотел бы иметь ссылку с изображением на следующую статью в правой боковой панели.Когда дело доходит до первой статьи в базе данных или самой новой, я либо не хочу, чтобы ссылка с картинкой или, возможно, ссылка на самую старую историю в базе данных могла вернуться назад.

У меня есть код, работающий там, где он получает следующую статью и отображает ее фотографию на обложке со ссылкой на нее.Если бы somone мог помочь мне написать условие для первой статьи в базе данных, чтобы я не получил ошибок, которые были бы хороши.Вот код, который у меня есть:

страница показа:

  <div id="next-story-sidebar">
      <%= link_to "next story", @next_home_blog, style: "font-size:20px;" %>
      <%= image_tag @next_home_blog.image.to_s, style: "width:60px;height:60px;" %>
  </div>

home_blog.rb

def next
    self.class.where("id > ?", id).first
  end

  def previous
    self.class.where("id < ?", id).last
  end

  def last
    self.class.where("id = ?", id).last 
  end



   home_blogs_controller.rb 

  def show
    @home_blog = HomeBlog.find(params[:id])
    @next_home_blog = @home_blog.next
  end

ошибка, когда я нажимаю ссылку на следующую историю, которая приводит меня кПервая статья в базе данных: неопределенный метод `image 'для nil: NilClass

1 Ответ

0 голосов
/ 23 сентября 2018

Это потому, что вам нужен базовый вариант для ваших запросов.

self.class.where("id > ?", id).first

Проблема в том, что если у вас есть идентификатор 1,2,3, и вы находитесь на номер 3. Это вернет коллекцию длиной 0 и сначала в пустой коллекции.is nil.

Чтобы исправить это, вы можете либо выполнить проверку nil везде в своем приложении

<% if @next_home_blog %>
  <div id="next-story-sidebar">
    <%= link_to "next story", @next_home_blog, style: "font-size:20px;" %>
    <%= image_tag @next_home_blog.image.to_s, style: "width:60px;height:60px;" %>
  </div>
<% end %>

, либо сделать что-то, где вы возвращаете NullBlog, чтобы представить эту концепцию и обрабатывать его в более стиле OO.Вот ссылка на шаблон NullObject, с которого можно начать, если вы хотите исследовать это.https://robots.thoughtbot.com/rails-refactoring-example-introduce-null-object

...