0

我有一个模型帖子,它属于_to 类别(使用friendly_id)。现在我想列出一个类别中的所有帖子。要获取索引页面,我想使用如下链接:http://mysite/posts/category/_category_slug_,为此我做了以下路线:

match 'posts/category/:category/' => 'posts#index'

在我的后控制器中,我得到了:

def index
  if params[:category]
    @posts = Post.all(:joins => :category, :conditions => {"categories.cached_slug" => params[:category]})
  else
    @posts = Post.all.reverse
  end
...

它应该像它应该的那样工作,但我不认为它是friedndly_id 的方式。

有没有更好的方法来实现这一目标?谢谢你的帮助。

4

1 回答 1

0

FriendlyId 增加了使用 slug 对模型进行查找的能力,并且足够聪明,可以先检查 cached_slug 列。

您可以通过先在 Category 模型上执行查找然后获取所有帖子来获得相同的结果。

这假设与引用 ID 列(或 HABTM)有一个 has_many 和 belongs_to 关联

def index
  if params[:category]
    @posts = Category.find(params[:category]).posts
  else
    @posts = Post.all.reverse
  end
...

由于您正在传递类别参数(作为friendly_id),因此通过类别模型引用它是有意义的。

-- 添加了更多信息 --

另外:历史发现仍然有效..因此,如果您通过重命名类别生成了新的 slug,则旧 url 将正常运行(如果您避免 404,那就太好了)

于 2012-02-26T13:45:07.543 回答