我正在使用 Ruby on Rails 制作一个网站,引用了 Airbnb,但我发现很难制作以下 URL 结构。
https://www.airbnb.com/help/article/767/what-is-the-resolution-center
在这个URL中,help下好像有文章资源,所以767就是文章的ID。此外,在 ID 之后,URL 中还有页面名称。
scope '/help' do
resources :articles
end
通过这样做,我能够路由到这部分。
/help/articles/'page_id'
但我不知道从这里开始做什么。
我生成了文章模型(title:string, content:text),我猜每篇文章(title and content)都是根据id显示的。
这是我的问题。
- Airbnb 如何在文章 ID 之后路由 page_name?
- 如果显示文章表中的标题和内容,如何放置超链接或将内容国际化I18n?
- 另外,如果我的猜测一开始就错了,请告诉我,并告诉我 Airbnb 如何安排每篇文章。
谢谢。
最佳答案
告诉 Rails 接受像 /help/article/767/what-is-the-resolution-center
这样的 URL 下的请求实际上很容易,当你使用 get
而不是嵌套的 resources
:
get '/help/article/:id/:slug', to: 'help_atricles#show', as: 'help_article'
给定上述 URL,Rails 将从 URL 中提取 id
和 slug
并将请求路由到 show
方法 HelpArticlesController
。
Controller 方法可以简单到:
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
部分来标识文章应显示的区域设置。
关于ruby-on-rails - Airbnb 如何发送每篇文章?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50869241/