追加機能を含むいくつかのエンジンを備えた 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
アプリ内:
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
)。