1

我在 Rails 应用程序中使用acts_as_commentable来允许评论不同类型的模型。

我有一个多态的CommentsControllerala多态协会 Railscast

我正在尝试为此控制器编写规格;但是,我想使用acts_as_fu来定义一个通用Commentable类,供控制器在规范中使用。这样它就不会与我们的具体可评论模型之一绑定。

Commentable问题是,当我尝试测试控制器操作时,我收到路由错误,因为我使用acts_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

更新:找到了一个“hacky”解决方案。我想知道是否有更清洁的方法可以做到这一点。

4

1 回答 1

2

在 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
于 2013-09-09T21:03:29.020 回答