我有一个 Rails 3 应用程序,其中有多个包含附加功能的引擎。每个引擎都是一项单独的服务,客户可以购买访问权限。
然而,我遇到了来自引擎的路由问题,这些路由对于控制器和视图来说并不容易使用。
控制器:
class ClassroomsController < ApplicationController
..
respond_to :html
def index
respond_with(@classrooms = @company.classrooms.all)
end
def new
respond_with(@classroom = @company.classrooms.build)
end
..
end
app/views/classrooms/new.html.haml
:
= form_for @classroom do |f|
..
f.submit
config/routes.rb
在引擎中:
MyEngineName::Engine.routes.draw do
resources :classrooms
end
config/routes.rb
in app:
Seabed::Application.routes.draw do
mount MyEngineName::Engine => '/engine'
...
end
lib/my_engine_name.rb
在引擎中:
module MyEngineName
class Engine < ::Rails::Engine
end
end
试图去/classrooms/new
结果是
NoMethodError in Classrooms#new
Showing app/views/classrooms/_form.html.haml where line #1 raised:
undefined method `hash_for_classrooms_path' for #<Module:0x00000104cff0f8>
并尝试致电classrooms_path
从任何其他视图都会导致相同的错误。
不过我可以打电话MyEngineName::Engine.routes.url_helpers.classrooms_path
并让它发挥作用。我想我可能定义了错误的路线,但找不到其他可行的方法。
尝试使用 Passenger(独立和 Apache 模块)和 WEBrick(rails 服务器)运行该应用程序。使用 Git 中的最新 Rails (7c920631ec3b314cfaa3a60d265de40cba3e8135
).