我在Rails应用中使用acts_as_commentable来允许对不同类型的模型进行评论。
我有一个多态CommentsController
ala Polymorphic Association Railscast。
我正在尝试为此控制器编写规范;但是,我想使用acts_as_fu来定义控件的通用Commentable
类,以便在规范中使用。这种方式与我们具体的可评论模型无关。
问题是,当我尝试测试控制器操作时,我得到路由错误,因为我没有使用acts_as_fu创建的Commentable
类的路由。
我需要一种方法来为这个动态创建的模型在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
更新:找到'hacky'解决方案。我想知道是否有一种更清洁的方式来做到这一点。
答案 0 :(得分:2)
为adding routes at runtime in Rails 3找到了一个解决方案,虽然是一个hacky:
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