【问题标题】:How does Airbnb route each article?Airbnb 如何发送每篇文章?
【发布时间】:2018-11-24 22:12:17
【问题描述】:

我正在使用 Ruby on Rails 制作一个网站,并引用 Airbnb,但我发现很难制作以下 URL 结构。

https://www.airbnb.com/help/article/767/what-is-the-resolution-center

在这个网址中,似乎有帮助下的文章资源,所以767是文章的ID。另外,ID后面是URL中的页面名称。

scope '/help' do
  resources :articles
end

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

/help/articles/'page_id'

但我不知道从这里做什么。

我生成了文章模型(title:string, content:text),我猜每篇文章(title和content)都是按照id来显示的。


这是我的问题。

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

谢谢。

【问题讨论】:

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


【解决方案1】:

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

get '/help/article/:id/:slug', to: 'help_atricles#show', as: 'help_article'

给定上述 URL,Rails 将从 URL 中提取 idslug,并将请求路由到 HelpArticlesControllershow 方法。

那个控制器方法可以很简单:

def show
  @article = HelpArticle.find(params[:id])
end

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

<%= link_to(
      @article.title, 
      help_article_path(
        id:   @article.id, 
        slug: @article.title.parameterize
      )
    ) %>

阅读更多关于这个routing method in the Rails Guides

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

【讨论】:

  • 另一种常见的方法是将给定的params[:slug] 与实际的slug 进行比较,如果它们不匹配则重定向到后者。这使得 slug 部分在访问资源时是可选的,但可以确保 URL 一致。
  • 您好,非常感谢您的回答!!我试着做你写的(我做了article_pass,articles#show,而不是你写的,因为我已经有文章控制器),我有这个错误。 ActionView::Template::Error: undefined local variable or method `article' for #:0x000000072046b0> 我应该在哪里修复?我认为模型是问题,但我不知道。
  • UPS,对不起。这是我的错。我更新了我的答案来解决这个问题。在视图中,您必须使用@article 而不仅仅是article
  • 好的,但我收到了另一个错误。语法错误,意外'(',期待')' @article.title,@article_path(id:@article.id,slug:@articl 我的视图文件是这样的。'

    帮助中心

    有什么可以帮到你的?

    文章前面的所有@。
  • 看起来@ 和变量名称之间有空格。这是不对的,把空格去掉,把@article写成一个字。
猜你喜欢
  • 2015-10-11
  • 1970-01-01
  • 1970-01-01
  • 2019-02-09
  • 1970-01-01
  • 1970-01-01
  • 2014-07-14
  • 1970-01-01
  • 2021-12-08
相关资源
最近更新 更多