0

我正试图围绕路由在 Rails 中的工作原理。基本上我正在尝试创建一个简单的 CMS。

用户将能够对页面进行 CRUD,因此在某处必须有某种动态功能。

我创建了一个带有 ID、名称和内容的简单页面模型。

与每个页面名称匹配的 url 将显示每个页面的内容:

  • 例子.com
  • example.com/about
  • example.com/news
  • example.com/staff

如何将 url 匹配到正确的页面?

(我认为解决方案是将页面名称传递给相关的控制器和操作,测试它是否与数据库中的任何页面匹配以及是否显示页面内容)。

4

1 回答 1

1

规范的解决方案是to_param在您的模型中覆盖以返回唯一的、与 url 兼容的页面名称:

 def to_param
   title.parameterize
 end

这样,所有 url 助手都将使用这个值来构建 url:

 page_path(@some_page) # => 'pages/some-page-title'

然后在您的控制器中,您将不得不以某种方式实现一个查找器方法,该方法能够从其参数中获取页面(该参数将在 中可用params[:id])。它通常是这样的:

 class Page < ActiveRecord::Base

   def self.from_param(param)
     where(title: param).first
   end

   def self.from_param!(param)
     from_param(param) || fail(ActiveRecord::RecordNotFound)
   end

 end

现在,如果您希望您的页面可以从根路径访问,您可以执行以下操作:

  Rails.application.routes.draw do 

    resources :pages, path: '/'

  end

谨防 !将此路线放在 的末尾routes.rb,否则它将捕获所有内容。

于 2013-11-04T14:57:42.520 回答