Ruby on rails 不使用整数作为id时生成URL?

Ruby on rails 不使用整数作为id时生成URL?,ruby-on-rails,Ruby On Rails,因此,我正在构建一个博客引擎,它的URL结构是/articles/然后是文章permalink。我需要有上一篇和下一篇的链接,它们将在发布日期前跳转到下一篇文章,我的代码如下所示: 在我的文章中#show 我得到的具体错误消息是: article_url failed to generate from {:action=>"show", :controller=>"articles", :id=>nil}, expected: {:action=>"show", :con

因此,我正在构建一个博客引擎,它的URL结构是/articles/然后是文章permalink。我需要有上一篇和下一篇的链接,它们将在发布日期前跳转到下一篇文章,我的代码如下所示:

在我的文章中#show

我得到的具体错误消息是:

article_url failed to generate from {:action=>"show", :controller=>"articles", :id=>nil}, expected: {:action=>"show", :controller=>"articles"}, diff: {:id=>nil}
没有上一个和下一个,一切都很好,但我不知道为什么这不起作用。有人想帮忙吗

@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)

在模板中插入
,然后检查
@next_article.permalink的值是多少?我怀疑permalink为空(空字符串或nil)


另外,一般来说,我可以推荐作为解决此问题的更可靠的解决方案(包括更改永久链接和其他功能)。

您可以使用解决此问题,将每页的文章数设置为1,并使用a按发布日期订购文章。那么你的下一个和上一个链接就可以正常工作了。“下一个”和“上一个”的URL将显示页码,而不是日期,但您可能会修改发送到操作的参数的行为,以使用日期而不是页码。

解决了我自己的问题,因为我只有2条记录—它总是找到一条nil记录。我将视图中的代码更改为:

<%= link_to "Next", article_path(@next_article) if !@next_article.nil? %>
<%= link_to 'Prev', article_path(@prev_article) if !@prev_article.nil? %>


愚蠢和夸张的问题,但我想我会为将来遇到此问题的任何人添加解决方案。

抱歉,这是一个复制粘贴错误。它实际上是@next_article。因此,我使用了调试器,它发现@next_article.permalink,但它将@next_article.id作为零,因此,它似乎正在查找该对象,但由于某些原因,by object没有id。这意味着该对象尚未保存到数据库中。或者您是否覆盖了id方法?我有def to_param self.permalink end作为覆盖URL生成的一种方式,但我没有修改id。因此,我删除了数据库中的两个条目,并创建了几个测试帖子。正在引发相同的错误。另外,为什么不将对象保存到数据库中?
@next_picture = Article.find(:first, :conditions => [ "pub_date > ?", @article.pub_date])
@next_article = Article.find(:first, :conditions => [ "pub_date > ?", @article.pub_date])
<%= link_to "Next", article_path(@next_article) if !@next_article.nil? %>
<%= link_to 'Prev', article_path(@prev_article) if !@prev_article.nil? %>