我正在建立一个名为 Ruby on Rails 的网站,引用Airbnb,我发现很难建立以下网址结构。
https://www.airbnb.com/help/article/767/what-is-the-resolution-center
在此URL中,似乎帮助下有文章资源,因此767是文章的ID。此外,在ID之后,URL中有页面的名称。
scope '/help' do
resources :articles
end
通过这样做,我能够路由到这一部分。
/帮助/物品/ 'PAGE_ID'
但我不知道该怎么做。
我生成了文章模型(标题:字符串,内容:文本),我猜测每篇文章(标题和内容)都是根据id显示的。
这是我的问题。
谢谢。
答案 0 :(得分:5)
当您使用/help/article/767/what-is-the-resolution-center
而不是嵌套get
时,告诉Rails接受resources
等网址下的请求实际上非常简单:
get '/help/article/:id/:slug', to: 'help_atricles#show', as: 'help_article'
鉴于上述网址,Rails会从网址中提取id
和slug
,并将请求路由到show
的{{1}}方法。
该控制器方法可以简单如下:
HelpArticlesController
要构建此类网址,您可以使用def show
@article = HelpArticle.find(params[:id])
end
部分定义的help_article_path
辅助方法:
as: 'help_article'
详细了解此routing method in the Rails Guides
顺便说一下。我没有使用URL的<%= link_to(
@article.title,
help_article_path(
id: @article.id,
slug: @article.title.parameterize
)
) %>
部分,因为我觉得它使URL看起来更好并且可能与SEO相关,但从应用程序的角度来看它感觉无用。如果您不想使用浏览器的区域设置,则可能需要使用slug
部分来标识应显示文章的区域设置。