routes - 使用完整引擎未定义 Rails url 链接辅助方法

标签 routes helper rails-engines

Rails 3.2.12 2/27/2013

我们有一个名为 base2_cms 的完整 Rails 引擎,其模型名为“Event”。使用rails服务器运行引擎没有问题。

接下来,另一个名为 base2_cvb 的完整 Rails 引擎,使用 base2_cms 打包为 gem。这没有问题。

接下来,应用程序使用这两个引擎作为 gem。自从引擎问世以来我们就一直这样做,但最近做了很多改变。一路上的某个地方,路由停止工作了。或者我猜更准确地说,是 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

在最终应用程序级别使用 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" 

但是,当在 View 中使用 link_to 时,无法找到顶部所述的 event_path 方法。

最佳答案

当您使用引擎时,您必须指定路由是主应用程序的还是引擎的,如果它来自主应用程序,您可以使用以下命令来执行此操作

main_app.event_path

如果它来自base2_cms引擎,你可以输入

base2_cms.event_path

或者如果是base2_cvb引擎:

base2_cvb.event_path

如果您不指定路线所在的位置,它将搜索当前引擎的路线,或者如果您不在任何引擎中,则从主应用程序搜索路线

关于routes - 使用完整引擎未定义 Rails url 链接辅助方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15127367/

相关文章:

ruby-on-rails - 将迁移添加到 Rails 引擎的安装生成器

node.js - 正确处理匹配两个路由的 URL

c - 如何找到默认网关的地址和面向它的本地地址?

angularjs - 与AngularJS中的$ routeChangeSuccess相反

css - jquery ui draggable + sortable helper 样式

ruby-on-rails - 覆盖 ActiveRecord 模型并定义新的 attr_accessible 时,如何添加而不重复?

android-studio - 如何根据flutter中的sharedPrefs值设置动态initialRoute?

ruby-on-rails - 使用 RSpec 在 Rails 中测试 View 助手

forms - CakePHP 3 更改单选输入模板

ruby-on-rails - 如何为 gem 的模型添加回调?