如何在Rails 4中为自引用控制器设置嵌套路由

时间:2013-08-13 20:06:42

标签: ruby-on-rails ruby-on-rails-4 rails-routing self-reference

我有一个类别控制器设置作为自引用控制器,使我能够创建一系列子类别。但是,我完全不知道如何在我的应用程序中设置路由,所以我可以使用http://www.example.com/category/subcategory/product/等网址

我目前将我的类别路由设置为

resources :categories, except: :index, :path => '/'

我的模型设置为

class Category < ActiveRecord::Base
  has_many :subcategories, :class_name => "Category", :foreign_key => "parent_id", :dependent => :destroy
  belongs_to :parent_category, :class_name => "Category", :foreign_key=>"parent_id"
end

然而,在阅读了Rails指南以便在其他地方寻找解决方案之后,我完全难以接受这样的任务。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

要拥有嵌套路由,您需要将嵌套路由包装在do end块中:

resources :categories, except: :index, :path => '/' do
  resources :subcategories do
    resources :products
  end
end

对于自引用部分,为什么不创建subcategories控制器和模型并将其与category模型相关联?所以你得到以下网址:

http://example.com/categories/1/subcategories/3/products

使用单独的模型可以访问一些有用的方法:

class Category < ActiveRecord::Base
  has_many :subcategories

class Subcategory < ActiveRecord::Base
  belongs_to :category

现在,您可以看到属于某个类别的所有子类别,子类别所属的类别等等。

Category.find(1).subcategories
Subcategory.find(1).category

结帐Active Record Association