2013-02-28 106 views
2

的Rails 3.2.12 2013年2月27日导轨采用全引擎

我们有一个完整的轨道引擎调用base2_cms了一个名为“事件”模型的URL链接辅助方法不确定的。使用rails服务器运行引擎没有问题。

接下来,另一个完整的轨道引擎使用base2_cms打包在这个gem.No问题称为base2_cvb

接下来,应用程序使用这两个引擎作为宝石。自引擎首次推出以来,我们一直这样做,但最近发生了很多变化。沿线的某处,路由停止工作。或者我更准确地说,rails url链接辅助方法。

在应用层,使用的link_to与所述第二参数作为事件的实例时,会发生这样的错误:

undefined method `event_path' for #<#<Class:0x007f82d52b3c20>:0x007f82d52a7240> 

堆栈跟踪:

actionpack (3.2.11) lib/action_dispatch/routing/polymorphic_routes.rb:129:in `polymorphic_url' 

actionpack (3.2.11) lib/action_dispatch/routing/polymorphic_routes.rb:135:in `polymorphic_path' 

actionpack (3.2.11) lib/action_view/helpers/url_helper.rb:111:in `url_for' 

actionpack (3.2.11) lib/action_view/helpers/url_helper.rb:242:in `link_to' 

base2_cms (0.9.40) app/helpers/application_helper_fieldset.rb:31:in `fieldset_combined_title' 

base2_cms (0.9.40) app/helpers/application_helper_index.rb:35:in `index_start' 

base2_cms (0.9.40) app/views/organizations/index.html.erb:2:in 

这不是特别多态相关,因为我们有其他类似的问题,例如在不同情况下得到这个错误:

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 

在最终应用级使用轨控制台,我们甚至可以这样做:

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,则无法按照顶部所述找到event_path方法。

+0

您的宝石是否有独立命名空间?你如何装载引擎路由(base2_cvb和base2_cvb与MainApp)?这可能会有所帮助,http://edgeapi.rubyonrails.org/classes/Rails/Engine.html#label-Using+Engine%27s+routes+outside+Engine – westonplatter 2013-03-08 18:19:14

+0

在您的视图中尝试'main_app.event_path' – NARKOZ 2013-06-24 12:59:14

回答

2

当您使用引擎,你必须指定如果路由是主要的应用程序或引擎,如果从主应用程序,您可以对

main_app.event_path 

做到这一点,如果它从base2_cms发动机你可以把

base2_cms.event_path 

,或者如果它是base2_cvb引擎:

base2_cvb.event_path 

,如果你不指定路线在哪里它将搜索当前引擎的路线或从主应用程序搜索,如果您不在任何引擎中