我有每个艺术品的艺术品和详细页面数据库。当我将以下代码添加到show.html.erb页面时,链接非常有用。接下来带我到下一个艺术作品,之前的作品将我带回来。如果之前没有,则链接消失,反之亦然。
show.html.erb包含
<% if @artwork.next.present? %>
<%= link_to "Next →".html_safe, @artwork.next %>
<% end %>
<% if @artwork.previous.present? %>
<%= link_to "← 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' %>
答案 0 :(得分:1)
不是检查是否存在next
和previous
,而是检查以确保@artwork
存在:
<% if @artwork.present? %>
<% if @artwork.next.present? %>
<%= link_to "Next →".html_safe, @artwork.next %>
<% end %>
<% if @artwork.previous.present? %>
<%= link_to "← Previous".html_safe, @artwork.previous %>
<% end %>
<% end %>