Airbnb如何处理每篇文章?

时间:2018-06-15 04:45:09

标签: ruby-on-rails ruby url routing url-routing

我正在建立一个名为 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显示的。

这是我的问题。

  • Airbnb如何在文章ID之后路由page_name?
  • 如果显示文章表格中的标题和内容,您如何使用I18n放置超链接或将内容国际化?
  • 另外,请先告诉我我的猜测是否错误,并告诉我Airbnb如何处理每篇文章。

谢谢。

1 个答案:

答案 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会从网址中提取idslug,并将请求路由到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部分来标识应显示文章的区域设置。