RoR вложенные категории - PullRequest
       2

RoR вложенные категории

3 голосов
/ 05 февраля 2011

люди! Интересно, как сделать URL как: site.com/coding/ruby/rails/article-name Как видите, есть вложенная категория. Я уже смотрел на дерево действий и удивительные вложенные наборы, но это делает URL-адреса как site.com/rails/article-name.

Итак, пожалуйста, помогите мне

Ответы [ 3 ]

4 голосов
/ 05 февраля 2011

Если вы хотите использовать ресурсный контроллер, создайте маршрут следующим образом:

scope '(*categories)' do
  resources :articles
end

для этого потребуется использовать «article» в конце ваших URL: / coding / ruby ​​/ rails /article / article-name

или вы можете использовать маршрут, подобный следующему:

match '(*categories)/:id' => 'articles#show', :as => :article

, это позволит вам сделать article_path (: Categories => 'Coding / ruby ​​/ rails',: id=> article.friendly_id)

для получения / coding / ruby ​​/ rails / article-name

Если вы используете awesome_nested_set, вы можете сгенерировать строку категорий, выполнив что-то вроде

article.category.self_and_ancestors.join("/")
0 голосов
/ 05 февраля 2011

Чтобы настроить это, вы начинаете с маршрута, который выполняет "маршрутизацию":

match "*category" => "categories#show"

или

match "categories/*category" => "categories#show"

в вашем контроллере вы получите все части URL через params хеш.Чтобы сохранить вещи в чистоте, определите логику поиска в вашей модели

def show
  @category = Category.find_recursive(*params[:categories])
end

в вашей модели, определите метод для поиска категории.Я предполагаю, что actions_as_tree определен в вашей модели

def self.find_recursive(*categories)
  children = roots
  last = nil
  categories.each do |category|
    return unless children

    last = children.find_by_permalink(category)
    children = last.children
  end
  last
end
0 голосов
/ 05 февраля 2011

Вы можете попробовать использовать Friendly-id .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...