Rails - FriendlyId和条件

时间:2011-07-29 09:06:00

标签: ruby-on-rails routes friendly-id

我有一个模型帖子,属于category_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
...

它的工作原理应该如此,但我不认为这是方便的。

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

1 个答案:

答案 0 :(得分:0)

FriendlyId增加了使用slug在模型上进行查找的功能,并且足够智能,可以先检查cached_slug列。

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

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

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

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

- 添加了更多信息 -

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