Airbnb如何处理每篇文章?

Nat*_*tsu 1 ruby url routing ruby-on-rails 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
Run Code Online (Sandbox Code Playgroud)

通过这样做,我能够路由到这一部分.

/帮助/用品/ 'PAGE_ID'

但我不知道该怎么做.

我生成了文章模型(标题:字符串,内容:文本),我猜测每篇文章(标题和内容)都是根据id显示的.


这是我的问题.

  • Airbnb如何在文章ID之后路由page_name?
  • 如果显示文章表中的标题和内容,如何将内容与I18n放在一起或将内容国际化?
  • 另外,请告诉我我的猜测是否错误,并告诉我Airbnb如何路由每篇文章.

谢谢.

spi*_*ann 5

告诉Rails接受URL下的请求,/help/article/767/what-is-the-resolution-center当你使用get而不是嵌套时,实际上非常容易resources:

get '/help/article/:id/:slug', to: 'help_atricles#show', as: 'help_article'
Run Code Online (Sandbox Code Playgroud)

鉴于上述的URL,滑轨会提取idslug从URL和将请求路由到所述show的方法HelpArticlesController.

该控制器方法可以简单如下:

def show
  @article = HelpArticle.find(params[:id])
end
Run Code Online (Sandbox Code Playgroud)

要构建此类URL,您可以使用help_article_pathas: 'help_article'部件定义的辅助方法:

<%= link_to(
      @article.title, 
      help_article_path(
        id:   @article.id, 
        slug: @article.title.parameterize
      )
    ) %>
Run Code Online (Sandbox Code Playgroud)

在Rails指南中阅读有关此路由方法的更多信息

顺便说一句.我没有使用slugURL 的一部分,因为我觉得它使URL看起来更好并且可能与SEO相关,但从应用程序的角度来看它感觉无用.slug如果您不想使用浏览器的区域设置,则可能需要使用该部件来标识应显示文章的区域设置.