0

我有一个 Rails 应用程序,我想在其中介绍一些静态页面。由于我的应用程序同时具有“公共”面孔和全面的管理后端,因此我决定将我的控制器移动到相应的子文件夹中,因此 app/controllers 仅包含两个子文件夹。

现在,我正在创建一个包含公司政策的政策部分。

到目前为止,我已经提出了这个解决方案,但它不起作用

namespace :policy, path: 'politik' do
  get 'miljoe'
  get 'kvalitet'
  get 'kunde'
  get 'personale'
end

这将创建以下路线:

                 policy_miljoe GET    /politik/miljoe(.:format)                      policy#miljoe
               policy_kvalitet GET    /politik/kvalitet(.:format)                    policy#kvalitet
                  policy_kunde GET    /politik/kunde(.:format)                       policy#kunde
              policy_personale GET    /politik/personale(.:format)                   policy#personale

短路线和正确路径。这一切都很好,除了......它在 app/controllers 中查找控制器,而不是在 app/controllers/public 中查找。添加一个

namespace :policy, path: 'politik', controller: 'public/policy' do

没有做到这一点。

到目前为止,我唯一的“解决方案”是创建一个指向控制器的虚假资源路由并执行额外的收集路由,如下所示:

resources :policy, path: 'politik', controller: 'public/policy', only: [] do
  collection do
    get 'miljoe'
    get 'kvalitet'
    get 'kunde'
    get 'personale'
  end
end

这有效,但它

  • 无缘无故地为 url 助手添加索引,所以我得到的是 miljoe_policy_index_path 而不是 policy_miljoe_path。
  • 以一种奇怪的方式阅读,因为资源意味着宁静,而这些页面没有任何宁静。

我怎样才能最好/最优雅地在路由器中声明这些静态页面并维护一个看起来与/politik/kvalitet路由器中的目录结构不同但/public/policy/kvalitet在文件夹结构中的 url 结构?

4

1 回答 1

0

我最终使用scope了完美解决问题的方法:

scope module: 'public' do
  namespace :policy, path: 'politik' do
    get 'miljoe'
    get 'kvalitet'
    get 'kunde'
    get 'personale'
  end
end

这会产生以下帮助程序、url 和操作。

    policy_miljoe GET    /politik/miljoe(.:format)       public/policy#miljoe
  policy_kvalitet GET    /politik/kvalitet(.:format)     public/policy#kvalitet
     policy_kunde GET    /politik/kunde(.:format)        public/policy#kunde
 policy_personale GET    /politik/personale(.:format)    public/policy#personale
于 2013-05-15T00:30:52.537 回答