У меня есть приложение Rails 3 с несколькими двигателями, содержащими дополнительные функции. Каждый движок - это отдельная услуга, к которой клиенты могут приобрести доступ.Как я могу сделать маршруты из механизма 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
и заставить его работать. Я думаю, что я мог бы определить маршруты неправильно, но не могу найти другой способ, который работает.
Пробовал использовать приложение как с пассажирским (автономным, так и с Apache-модулем) и WEBrick (сервер рельсов). Использование последних Rails из Git (7c920631ec3b314cfaa3a60d265de40cba3e8135
).
Doing что, снимая навесной вызов в моем приложении-маршрутах, и определении объема в машинных маршрутах ('scope '/ engine' do') и все работает. Большое спасибо :) – PerfectlyNormal
Прохладный, спасибо за информацию о других шагах, необходимых для работы Маршрутов двигателя. – bowsersenior
Для Rails 3.1 и более поздних версий удалите параметр «map» в блок (просто удалите всю часть '| map |'). –