Создание URL-адресов, когда не используется целое число в качестве идентификатора? - PullRequest
4 голосов
/ 02 апреля 2010

Итак, я создаю движок блога, который имеет / article / 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}

Без prev и nextвсе работает нормально, но у меня нет идей, почему это не работает.Кто-нибудь хочет помочь?

Ответы [ 4 ]

1 голос
/ 04 апреля 2010

Решил мою собственную проблему, потому что у меня было только 2 записи, которые всегда находили нулевую запись. Я изменил код в представлениях:

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

Глупая и раздутая проблема, но я думал, что добавлю решение для тех, кто сталкивается с этим в будущем.

0 голосов
/ 03 апреля 2010

Вставьте <% debugger %> в свой шаблон, а затем проверьте значение @next_article.permalink? Я подозреваю, что постоянная ссылка пуста (либо пустая строка, либо ноль).

Также, в общем, могу ли я рекомендовать friendly_id в качестве более надежного решения этой проблемы (включая изменение постоянных ссылок и других функций).

0 голосов
/ 03 апреля 2010

Вы можете использовать will_paginate для этой проблемы и установить количество статей на странице равным 1, а также использовать named_scope , чтобы упорядочить статьи по pub_date. Тогда ваши следующие и предыдущие ссылки будут просто работать. URL для следующего и предыдущего показывали бы номер страницы, а не дату, но вы, вероятно, могли бы изменить поведение параметров, отправляемых действию, чтобы использовать дату вместо номера страницы.

0 голосов
/ 03 апреля 2010
@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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...