Как динамически добавлять маршруты в Rails 3.2
Я использую act_as_commentable в приложении Rails, чтобы комментировать различные типы моделей.
У меня полиморфный CommentsController
аля Полиморфная Ассоциация Railscast.
Я пытаюсь написать спецификации для этого контроллера; Тем не менее, я хотел бы использовать acts_as_fu для определения общего Commentable
класс для контроллера для использования в спецификации. Таким образом, он не привязан к одной из наших конкретных комментируемых моделей.
Проблема в том, что когда я пытаюсь проверить действия контроллера, я получаю ошибки маршрутизации, потому что нет маршрутов для Commentable
класс, который я создал, используя act_as_fu.
Мне нужен способ рисовать маршруты для этой динамически созданной модели в before(:all)
(используя, кстати, RSpec) для спецификаций.
Вот как выглядит моя спецификация:
describe CommentsController do
before(:all) do
# Using acts_as_fu to create generic Commentable class
build_model :commentable do
acts_as_commentable :comment
belongs_to :user
attr_accessible :user
end
# TODO - Initialize Commentable routes
end
end
ОБНОВЛЕНИЕ: нашел "хакерское" решение. Мне интересно, есть ли более чистый способ сделать это все же.
1 ответ
Нашел решение для добавления маршрутов во время выполнения в Rails 3, хотя и хакерское:
describe CommentsController do
before(:all) do
# Using acts_as_fu to create generic Commentable class
build_model :commentable do
acts_as_commentable :comment
belongs_to :user
attr_accessible :user
end
# Hacky hacky
begin
_routes = Rails.application.routes
_routes.disable_clear_and_finalize = true
_routes.clear!
Rails.application.routes_reloader.paths.each{ |path| load(path) }
_routes.draw do
# Initialize Commentable routes
resources :commentable do
# Routes for comment management
resources :comments
end
end
ActiveSupport.on_load(:action_controller) { _routes.finalize! }
ensure
_routes.disable_clear_and_finalize = false
end
end
end