Я пытаюсь создать модель страницы с помощью activeadmin и awesome_nested_set. Я пытался выяснить, как создавать динамические маршруты с правильными конечными слагами (например, / page1 / page1subpage / a-subpage-of-page1subpage / etc). Я нашел пост кого-то другого с кодом rails2, который я превратил в мой маршрут. Rb:
Page.all.each do |page|
page.url = "/"+page.self_and_ancestors.map{|p| p.slug}.join("/")
page.save
match page.url => "pages#show", :id => page.id
end
Он просто не пропускает никаких идентификаторов. Как мне заставить rails3 передать ID в маршрут ?? это просто соединение всех страниц со страницами # show без идентификатора param.
Также, если есть лучший способ сделать это в рельсах 3, дайте мне знать.
РЕДАКТИРОВАТЬ: похоже, что rails не любит передавать: id в качестве параметра .. Если я изменю его на: page_id, он будет работать ..
match page.url, :controller => 'pages', :action => 'show', :page_id => page.id
Как я могу перезагрузить маршруты или сделать это в активной записи?
Ответ (позднее редактирование): я закончил тем, что создал метод after_validation, который проверяет, был ли slug_changed? и для себя, его предков и потомков, заново создает URL для себя, сохраняет его, затем вызывает:
MyAppName::Application.reload_routes!
И я удалил метод page.save в маршрутах ..., который также вызывает некоторые проблемы при выполнении таких действий, как rake db: migrate на новых БД.