Routes 未使用完整引擎定义rails url链接帮助器方法
Rails 3.2.12 2/27/2013 我们有一个完整的rails引擎,名为base2_cms,模型名为“Event”。使用rails服务器运行引擎没有问题 接下来,另一个名为base2_cvb的完整rails引擎使用base2_cms打包为gem。这方面没有问题 接下来,应用程序将这两个引擎都用作gem。自从发动机首次问世以来,我们一直在这样做,但最近做了很多改变。在线路的某个地方,路由停止了工作。或者更准确地说,rails url链接帮助器方法 在应用程序级别,将link_to与第二个参数一起用作事件实例时,会发生以下错误:Routes 未使用完整引擎定义rails url链接帮助器方法,routes,helpers,rails-engines,Routes,Helpers,Rails Engines,Rails 3.2.12 2/27/2013 我们有一个完整的rails引擎,名为base2_cms,模型名为“Event”。使用rails服务器运行引擎没有问题 接下来,另一个名为base2_cvb的完整rails引擎使用base2_cms打包为gem。这方面没有问题 接下来,应用程序将这两个引擎都用作gem。自从发动机首次问世以来,我们一直在这样做,但最近做了很多改变。在线路的某个地方,路由停止了工作。或者更准确地说,rails url链接帮助器方法 在应用程序级别,将link_to与第二个
undefined method `event_path' for #<#<Class:0x007f82d52b3c20>:0x007f82d52a7240>
这与多态性无关,因为我们还有其他类似的问题,例如在不同的情况下出现此错误:
In order to use #url_for, you must include routing helpers explicitly. For instance, `include Rails.application.routes.url_helpers
我们曾尝试以各种方式遵循这最后一条建议,但在许多其他尝试解决方案中均未取得成功
在应用程序级别运行rake路由将返回以下关于事件模型的信息:
GET /events/:id/copy(.:format) events#copy
DELETE /events/:id/remove_organization(.:format) events#remove_organization
POST /events/:id/add_organization(.:format) events#add_organization
GET /events(.:format) events#index
POST /events(.:format) events#create
GET /events/new(.:format) events#new
GET /events/:id/edit(.:format) events#edit
GET /events/:id(.:format) events#show
PUT /events/:id(.:format) events#update
DELETE /events/:id(.:format) events#destroy
在最终应用程序级别使用rails控制台,我们甚至可以做到:
1.9.2-p320 :011 > app.event_path(9)
=> "/events/9"
1.9.2-p320 :012 > app.event_path(Event.find(88))
Event Load (13.1ms) SELECT "events".* FROM "events" WHERE "events"."id" = $1 LIMIT 1 [["id", 88]]
=> "/events/88"
但是,当在视图中使用link_to时,它无法找到顶部所述的事件路径方法。当您使用引擎时,您必须指定路由是属于主应用程序还是引擎,如果路由来自主应用程序,您可以使用它来执行此操作
main_app.event_path
如果它来自base2_cms引擎,您可以
base2_cms.event_path
或者如果是base2_cvb发动机:
base2_cvb.event_path
如果您没有指定路由的位置,它将在路由中搜索当前引擎;如果您不在任何引擎中,它将从主应用程序中搜索路由您的gems是否有独立的命名空间?如何安装发动机路线(带base2_cvb的base2_cms和带MainApp的base2_cvb)?这可能会有所帮助,请在视图中尝试
main\u app.event\u path
base2_cvb.event_path