Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Routes 未使用完整引擎定义rails url链接帮助器方法_Routes_Helpers_Rails Engines - Fatal编程技术网

Routes 未使用完整引擎定义rails url链接帮助器方法

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与第二个

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