Rails 3 - 自定义资源丰富的路由

时间:2011-03-07 17:29:51

标签: ruby-on-rails ruby routes

我为博客设置了资源丰富的路线(型号名称:文章)。

我想自定义我的资源路线指向

articles/show/title-of-my-article

现在我读完了这个:

http://edgeguides.rubyonrails.org/routing.html#customizing-resourceful-routes

但它似乎没有解释如何覆盖params而不仅仅是:controller或:action。问题是我可以做一个单一的资源或匹配一个GET请求,但我想覆盖我的资源丰富的路由,所以我仍然可以使用所有的资源助手(即article_path(@ article.title))等。

任何人都可以帮助我,非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

您应该覆盖模型上的to_param方法:

class Article
  def to_param
    self.title
  end
end

如果你想变得有点棘手,你应该阅读generating custom slugs

答案 1 :(得分:0)

除了乔尼的回答。

当您调用to_param等资源助手时,覆盖article_path(@article)方法将生成标题,并将其作为params[:id]传递给控制器​​。

此后,您需要手动或多或少地查找文章,即不要执行

Article.find(params[:id])

你需要做

Article.find_by_title(params[:id])

我不记得是否因为NotFound方法找不到记录而导致该find异常,在这种情况下,如果找到记录,则必须手动检查如果不是为了触发404页面,请自己提出异常。

这样做的一个问题是标题可能包含URL中不允许或推荐的字符,因此更好的方法是根据数据库中的标题存储一个slug并按此找到它。 / p>

(您可以通过在模型中使用过滤器并通过title.parameterize创建过滤器来自动创建slug)

最简单的当然是使用已经处理好这些事情的众多宝石和插件之一。