【发布时间】:2014-07-22 13:01:39
【问题描述】:
我有一个商店应用程序,我需要在其中创建自定义路由系统,其中 URL 存储产品的类别。例如,http://example.com/languages/ruby/rails 将显示名为“rails”的类别#show,其父项名为“ruby”,其父项名为“languages”,http://example.com/languages/ruby/rails/store 的 URL 将显示此类别中的产品。
目前我有:
category.rb
belongs_to :parent, class_name: 'Category'
has_many :categories, foreign_key: :parent_id
has_many :products
routes.rb
resources :categories, :path => '', :only => [:index, :show] do
resources :products, :path => '', :only => [:show]
end
root :to => 'products#index'
但它仍然最多可堆叠 2 个,例如URL http://example.com 和 http://example.com/languages 显示类别/子类别列表,但 http://example.com/languages/ruby 有参数:{"action"=>"show", "controller"=>"products", "category_id"=>"language", "id"=>"ruby"}
从路线中删除产品根本没有帮助 - 然后它只是说No route matches [GET] "/language/ruby",尽管我认为它可能会导致需要额外检查当前 URL 是否指向类别或产品。
我也尝试了get '*categories/:id', to: 'category#show' 变化
+ 我正在使用friendly_id gem,所以路径看起来不像http://example.com/2/54/111/6
我只是想找出这种情况下最好的 ruby on rails 解决方案,当您需要搜索引擎优化 + 无止境(例如,无法定义这种递归可以走多深)嵌套自己的嵌套资源时(包括事实category/language/category/ruby/category/rails 看起来很丑)。
注意:我使用的大部分信息来自 Stack Overflow 和 railscasts.com(包括 pro/revised 剧集),因此提及具有此类信息的良好来源也会很棒。
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-3 routing friendly-id