Ruby on rails Rails 3-定制资源丰富的路由
我已经为一个博客设置了资源丰富的路线(型号名称:Article) 我想定制我的足智多谋的路线指向Ruby on rails Rails 3-定制资源丰富的路由,ruby-on-rails,ruby,routes,Ruby On Rails,Ruby,Routes,我已经为一个博客设置了资源丰富的路线(型号名称:Article) 我想定制我的足智多谋的路线指向 articles/show/title-of-my-article 现在我读了一遍: 但它似乎并没有解释如何覆盖参数,而不仅仅是:controller或:action。问题是我可以执行单个资源或匹配GET请求,但我希望覆盖我的资源路由,这样我仍然可以使用所有资源帮助程序(即article_path(@article.title))等 有人能帮我吗?非常感谢所有人的帮助 您应该覆盖模型上的to_p
articles/show/title-of-my-article
现在我读了一遍:
但它似乎并没有解释如何覆盖参数,而不仅仅是:controller或:action。问题是我可以执行单个资源或匹配GET请求,但我希望覆盖我的资源路由,这样我仍然可以使用所有资源帮助程序(即article_path(@article.title))等
有人能帮我吗?非常感谢所有人的帮助 您应该覆盖模型上的to_param方法:
class Article
def to_param
self.title
end
end
如果你想变得更棘手一点,除了乔尼的答案,你还应该仔细阅读。 当您调用资源帮助程序(如
article\u path(@article)
)时,将覆盖到\u param
方法将生成标题,并将其作为params[:id]
传递给控制器
此后,您将需要或多或少手动查找文章,即,而不是执行
Article.find(params[:id])
你需要这样做
Article.find_by_title(params[:id])
我不记得如果未找到记录,是否会创建一个NotFound
异常,因为find
方法是这样做的。在这种情况下,您必须手动检查是否找到记录,如果未找到,则自己引发异常,以触发404页面
这样做的一个问题是,标题可能由URL中不允许或不推荐的字符组成,因此更好的方法是基于标题在数据库中存储一个slug,并通过该方法找到它
(您可以通过模型中的过滤器自动创建slug,并通过title.parameterize
创建slug)
当然,最简单的方法是使用已经处理这些事情的众多gem和插件中的一个。是的,我知道我必须去掉标题中所有不好的部分,使其对URL友好。我将编写自己的或使用gem在before_save过滤器中操纵标题,并将操纵的字符串保存在DB的URL字段中。然后只需覆盖jonnii提供的to_param方法。非常感谢你们两位!