【问题标题】:Rails routing with subfolders带有子文件夹的 Rails 路由
【发布时间】:2013-06-02 15:19:03
【问题描述】:

我的视图文件夹有这样的结构(它们显示逻辑结构):

所以我在 admin 子文件夹中有子文件夹,在目录文件夹中我必须有子文件夹、制造商等(制造商和其他有控制器的视图,只有目录和为空)

rails 自动为我生成了这样的路线:

 namespace :admin do
   namespace :catalogs do
     namespace :to do
       namespace :manufacturers do
         namespace :models do
           namespace :types do
             resources :articles
           end
         end
       end
     end
   end
 end

 namespace :admin do
   namespace :catalogs do
     namespace :to do
       namespace :manufacturers do
         namespace :models do
           resources :types
         end
       end
     end
   end
 end

 namespace :admin do
   namespace :catalogs do
     namespace :to do
       namespace :manufacturers do
         resources :models
       end
     end
   end
 end

 namespace :admin do
   namespace :catalogs do
     namespace :to do
       resources :manufacturers
     end
   end
 end

制造商,型号,类型正常工作,但文章工作奇怪......当我尝试编写这样的表单时:

= form_for [:admin, :catalogs, :to, :manufacturers, :models, :types, @art] do |f|
  = f.label "OEM"
  = f.text_field :oem_number
  = f.label "Бренд"
  = f.text_field :manufacturer
  = f.label "Название"
  = f.text_area :name
  = f.label "Кол-во"
  = f.text_field :quantity
  = f.label "Комментарий"
  = f.text_area :details
  = f.label "Только с VIN"
  = f.check_box :only_with_vin
  = f.hidden_field :type_id, @type_id
  .form-actions
    = f.submit 'Сохранить изменения', :class => "btn btn-primary"

有些东西不好,我明白了 #

的未定义方法 `admin_catalogs_to_manufacturers_models_types_to_articles_path'

但例如在类型中我有这样的形式:

= form_for [:admin, :catalogs, :to, :manufacturers, :models, @man] do |f|  
  %b
    = @man.Name
  %br
  = @man.TYP_PCON_START.to_s[4...6].concat("-").concat(@man.TYP_PCON_START.to_s[0...4])
  \-  
  -if @man.TYP_PCON_END.blank?
    = "наст. время"
  -else
    = @man.TYP_PCON_END.to_s[4...6].concat("-").concat(@man.TYP_PCON_END.to_s[0...4])
  %br
  = ((@man.TYP_HP_FROM.to_f*0.74).round).to_i
  kW
  = f.label "Отображать в списке ТО?"
  = f.check_box :is_in_to
  .form-actions
    = f.submit 'Сохранить', :class => "btn btn-danger"
    = link_to 'Назад', :back, :class => "btn"

一切都好,文章有什么问题?如何以及如何改变我的路线并优化它?我尝试了一下,但得到错误...

【问题讨论】:

  • 你的模型是什么样的?我很好奇你为什么需要这么多嵌入。
  • @mbratch忘记模型,必须这样做,但是怎么做?
  • @mbratch 我有制造商,它有很多型号,型号有很多类型,类型有很多文章,这就是所有型号,我只是决定将目录部分放在目录文件夹中,而不是放入。这不是问题......问题是如何做路由......模型是写的。这是 carparts 目录...非常庞大且私有的数据库,不能放在这里...
  • 我不认为这对命名空间有很好的用途,命名空间用于将相关的控制器收集在一起。你可能需要嵌套resources
  • @mbratch 也许,因为我写它是自动生成的......

标签: ruby-on-rails routing


【解决方案1】:

如果您希望保留这种嵌套结构,我认为最好使用嵌套资源而不是命名空间。

嵌套资源如下所示:

namespace :admin do 
  resources :catalogs do 
    resources :to do 
      resources :manufacturers do 
        resources :models do 
          resources :types do 
            resources :articles do 

文章表单如下所示:form_for [:admin, @catalogue, @to, @manufacturer, @model, @type, @article] 文章索引的 url 看起来像 admin_catalogs_to_manufacturers_models_types_articles_path(@catalogue, @to, @manufacturer, @model, @type) 并会生成一个 url 像:www.example.com/admin/catalogs/1/to/1/manufacturer/1/model/1/type/1/articles

请注意,url 的所有部分实际上都是实例,除了 admin

【讨论】:

  • 但是我需要在控制器中定义这个、目录、到、制造商、型号、类型、文章对吗?
  • 如果这就是你的意思,每个资源都需要一个控制器,是的。
  • 我的意思是你在路由中写@objects,我需要他们在控制器的方法中定义吗?除了例如输入类型的新动作?
  • 尝试 192.168.1.4:3000/admin/catalogs/to/manufacturers/1213/models/… 并获取未初始化的常量 Admin::Catalogs::To::ModelsController
  • 也是重构我的命名空间+资源路由的方法吗?
猜你喜欢
  • 2013-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-05
  • 2016-03-02
  • 2015-10-19
  • 2015-05-14
  • 1970-01-01
相关资源
最近更新 更多