0

我计划将我们当前的 cms(用 PHP 编写)移植到 Rails。所有部分都做得很好,除了一个:路由。

像大多数 cms 系统一样,我们的 cms 中的路由基于带有页面的数据库,这些页面链接到模块、控制器和操作。在这种方法中,用户可以完全自定义或指定它自己的 url。

我知道 Rails(和大多数(应用程序)框架都有在文件中定义路由的方法,但我希望这是可能的。

我们的用户应该采用的方法是:

  1. 添加新页面
  2. 选择类型(新闻、表格、产品……)
  3. 选择一个项目(选择应显示的表单、博客或产品)
  4. 输入该页面的网址

特别最后一点(4)很重要。用户应该能够将表单 A 添加到/contact-us,并将表单 B 添加到/clients/register-as-new-client例如

在请求中,路由器需要使用页面 url 进行数据库查询,以找出应该分派的控制器、任务和参数。

4

2 回答 2

1

问题已更新,我认为这不再是有效答案

我们有一个类似的寻呼系统。我们使用路由全局。在 routes.rb 中:

get 'pages/*lookup_path', to: 'pages#show', defaults: { format: 'html' }, as: 'page'

只需解析params[:lookup_path]PagesController满足您的需求

'http://localhost/pages/users/'
  params[:lookup_path] #=> users/
'http://localhost/pages/users/23'
  params[:lookup_path] #=> users/23
'http://localhost/pages/people/1'
  params[:lookup_path] #=> people/1
于 2013-09-12T18:06:00.423 回答
0

尽管此解决方案不是 ReSTful,但我认为这应该可以解决问题。

无论如何,Rails 在文件中使用路由。您无法更改这一点,因为该框架预示着“约定优于配置”。我所能做的就是为您指明一个方向,以尽量减少这种情况。

Rails 中有一条包罗万象的路由(在RailsCastsStackOverflow上),您可以使用它来将所有路由定向到一个控制器操作。您可以在该方法中进一步自定义路由行为

你也可以制作这样的路线……</p>

:controller/:action => Controller::Action

…就像在 CodeIgniter 中所做的那样,但是现在您的方法必须具有类似contact-usand的名称register-as-a-new-client

于 2013-09-12T18:28:57.117 回答