在Rails引擎规范中使用正确的url_for方法

我在Rails引擎中有一个请求规范。 呈现的视图调用路径并传入散列,即projects_path(:scope => "user") 。 像这样的路由最终将调用url_for ,但url_for在很多地方定义。 在主应用程序(根级别)中运行应用程序或运行请求规范时,调用链最终在ActionView::RoutingUrlFor#url_for ; 但是,当在引擎中运行规范时,调用链最终会出现在ActionView::Helpers::UrlHelper#url_for

在Rails 4中, UrlHelper定义的url_for方法不再接受哈希参数,所以我留下了这个错误

  Failure/Error: visit projects_opportunity_intakes_path ActionView::Template::Error: arguments passed to url_for can't be handled. Please require routes or provide your own implementation 

我想弄清楚的是,为什么当我在我的引擎中运行规范时,它会回到ActionView::Helpers::UrlHelper ,但在其他任何情况下都没有。 这非常令人困惑。 有一件事对我来说很突出:当我在视图中放置一个断点并评估self.class ,我通常得到一些从ActionView::Baseinheritance的东西,但是当我从我的引擎运行一个规范时,该类不会inheritance从任何事情。 我不知道这是否相关,但看起来很可疑。

有人经历过吗? 知道解决方法吗? 我的模块可能被包含在错误的订单中吗? 在spec_helper或虚拟应用程序初始化中有什么东西我可以做以确保正确使用正确的模块吗?

我在更新到Rails 4时遇到了同样的问题,我发现问题是包含以下行的模型:

 include Rails.application.routes.url_helpers 

尝试在应用程序中查找包含url_helpers代码。 删除该行应该有助于解决问题。

在我看来,问题是include ActionView::Helpersinclude Rails.application.routes.url_helpers相互冲突。

我发现如果你首先放置ActionView::Helpers它不会引发错误。 所以改变

 include Rails.application.routes.url_helpers include ActionView::Helpers 

 include ActionView::Helpers include Rails.application.routes.url_helpers 

包括ActionView :: Helpers :: UrlHelper – >在我的例子中,这是我必须搜索和评论的行。