Рельс слизняк для родословной модели - PullRequest
0 голосов
/ 13 июля 2011

У меня есть родословная для моей категории модели. Я использую слизняк. В настоящее время у меня есть следующее:

class Category < ActiveRecord::Base
  slug :name
end


class CategoriesController < ApplicationController
  inherit_resources
  defaults :finder => :find_by_slug
  def show
    @category = Category.find_by_slug(params['category_id'])
    show!
  end
end

  match "categories/:category_id" => 'categories#show', :as => :category

Это отлично работает, но я хочу показать parent / children path вместо / children

если в моей категории есть родитель. Как этого достичь?

Например, у меня есть категория BMW и x5 в качестве подкатегории. У меня теперь есть следующие ссылки: /categories/bmw для BMW и /categories/x5 для x5. мне нужна эта ссылка categories/bmw/x5 вместо подкатегории

Ответы [ 2 ]

0 голосов
/ 13 июля 2011
match "categories/:category_id" => 'categories#show', :as => :category_short
match "categories/:category/:category_id" => 'categories#show', :as => :category_long

  def category_path(category)
    unless category.is_root?
      category_long_path category.parent, category
    else
      category_short_path category
    end
  end
0 голосов
/ 13 июля 2011

Вы можете вложить свой оператор match в свой родительский ресурс, как показано ниже (по крайней мере, в Rails 3):

resources :things do
  match "categories/:category_id" => 'categories#show', :as => :category
end

Это должно создать маршрут, подобный /things/:thing_id/categories/:category_id

...