【问题标题】:Rails - FriendlyId and ConditionsRails - FriendlyId 和条件
【发布时间】:2011-10-15 19:14:39
【问题描述】:

我有一个模型帖子,它属于_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 的方式。

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

【问题讨论】:

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


    【解决方案1】:

    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-06-02
      • 2016-09-26
      • 1970-01-01
      • 2016-03-24
      • 1970-01-01
      • 2013-03-06
      • 2018-04-09
      • 1970-01-01
      • 2016-08-17
      相关资源
      最近更新 更多