如何在ROR标题中使用prev / next链接

时间:2015-02-28 00:10:44

标签: ruby-on-rails ruby-on-rails-4

我有每个艺术品的艺术品和详细页面数据库。当我将以下代码添加到show.html.erb页面时,链接非常有用。接下来带我到下一个艺术作品,之前的作品将我带回来。如果之前没有,则链接消失,反之亦然。

show.html.erb包含

<% if @artwork.next.present?  %>
  <%= link_to "Next &rarr;".html_safe, @artwork.next %>
<% end %>
<% if @artwork.previous.present? %>
  <%= link_to "&larr; Previous".html_safe, @artwork.previous %>
<% end %>

但我真的想把这些链接放到我的标题中,它在我的应用程序页面中呈现为部分。但是,我注意到,当我将链接复制/粘贴到部分中时,我在Artworks中得到了一个&#34; NoMethodError #index undefined method`previous&#39;为零:NilClass&#34;。我可以使用css在页面上移动链接,但这感觉很笨拙。从标题部分中获取这些链接的正确方法是什么?

模型(artwork.rb)有

  def previous
    Artwork.where(["id < ?", id]).order('rating DESC').last
  end

  def next
    Artwork.where(["id > ?", id]).first
  end

控制器(选定部分)

def index
    if params[:tag] 
      @artworks = Artwork.tagged_with(params[:tag])
    elsif params[:series]
      @artworks = Artwork.tagged_with(params[:series])
    else
      @artworks = Artwork.all
    end
  end

def show
    @artwork = Artwork.friendly.find(params[:id])
end

application.html.erb有

<%= render 'layouts/header' %>

1 个答案:

答案 0 :(得分:1)

不是检查是否存在nextprevious,而是检查以确保@artwork存在:

<% if @artwork.present?  %>
  <% if @artwork.next.present?  %>                                                                                                                                                                                                                       
    <%= link_to "Next &rarr;".html_safe, @artwork.next %>
  <% end %>
  <% if @artwork.previous.present? %>
    <%= link_to "&larr; Previous".html_safe, @artwork.previous %>
  <% end %>
<% end %>