所以我正在建立一个博客引擎,它有/ articles / then-the-article-permalink作为它的URL结构。我需要有prev和next链接,这些链接将跳转到pub_date的下一篇文章,我的代码如下所示:
在我的文章#show
中@article = Article.find_by_permalink(params[:id])
@prev_article = Article.find(:first, :conditions => [ "pub_date < ?", @article.pub_date])
@next_article = Article.find(:first, :conditions => [ "pub_date > ?", @article.pub_date])
在我的show.html.erb
中<%= link_to "Next", article_path(@next_article) %>
<%= link_to 'Prev', article_path(@prev_article) %>
在我的文章模型中,我有这个:
def to_param
self.permalink
end
我得到的具体错误信息是:
article_url failed to generate from {:action=>"show", :controller=>"articles", :id=>nil}, expected: {:action=>"show", :controller=>"articles"}, diff: {:id=>nil}
没有上一个和下一个一切都工作正常,但我没有想到为什么这不起作用。有人想帮忙吗?
答案 0 :(得分:1)
解决了我自己的问题,因为我只有2条记录,总是找到一条零记录。我将视图中的代码更改为:
<%= link_to "Next", article_path(@next_article) if !@next_article.nil? %>
<%= link_to 'Prev', article_path(@prev_article) if !@prev_article.nil? %>
愚蠢和夸大其词的问题,但我想我会为将来会遇到这种情况的人添加解决方案。
答案 1 :(得分:0)
@next_picture = Article.find(:first, :conditions => [ "pub_date > ?", @article.pub_date])
应该是这样的:
@next_article = Article.find(:first, :conditions => [ "pub_date > ?", @article.pub_date])
(我将@next_picture更改为@next_article)
答案 2 :(得分:0)
坚持模板中的<% debugger %>
,然后检查@next_article.permalink
的值是多少?我怀疑固定链接是空白的(空字符串或空字符串)。
另外,总的来说,我是否可以推荐friendly_id作为解决此问题的更强大的解决方案(包括更改永久链接和其他功能)。
答案 3 :(得分:0)
您可以使用will_paginate解决此问题,并将每页的文章数设置为1,并使用named_scope按pub_date排序文章。然后您的下一个和上一个链接将正常工作。 next和previous的URL将显示页码而不是日期,但您可以修改发送到操作的params的行为以使用日期而不是页码。