Tengo una aplicación Rails 3 con varios motores que contienen funcionalidad adicional. Cada motor es un servicio separado al que los clientes pueden acceder.¿Cómo puedo hacer que las rutas de un motor Rails 3 estén disponibles para la aplicación host?
Estoy, sin embargo, teniendo un problema con las rutas de los motores que no están disponibles para los controladores y las vistas.
controlador:
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
en el motor:
MyEngineName::Engine.routes.draw do
resources :classrooms
end
config/routes.rb
en aplicación:
Seabed::Application.routes.draw do
mount MyEngineName::Engine => '/engine'
...
end
lib/my_engine_name.rb
en el motor:
module MyEngineName
class Engine < ::Rails::Engine
end
end
intentar ir a /classrooms/new
resultados en
NoMethodError in Classrooms#new
Showing app/views/classrooms/_form.html.haml where line #1 raised:
undefined method `hash_for_classrooms_path' for #<Module:0x00000104cff0f8>
e intentar llamar classrooms_path
de cualquier otro ver los resultados en el mismo error. Puedo, sin embargo, llamar al MyEngineName::Engine.routes.url_helpers.classrooms_path
y ponerlo en funcionamiento. Estoy pensando que podría haber definido las rutas incorrectas, pero no puedo encontrar otra manera que funcione.
He intentado ejecutar la aplicación tanto con Passenger (módulo autónomo y Apache) como con WEBrick (servidor de carriles). Usando los últimos Rails de Git (7c920631ec3b314cfaa3a60d265de40cba3e8135
).
Haciendo eso, la eliminación de la montura de guardia en mis app-rutas, y la determinación del alcance de las cámaras de máquinas rutas ('scope '/ engine' do') y todo funciona. Muchas gracias :) – PerfectlyNormal
Genial, gracias por la información sobre los otros pasos necesarios para que las rutas del motor funcionen. – bowsersenior
Para Rails 3.1 y posteriores, elimine el parámetro 'map' del bloque (simplemente elimine toda la parte' | map | '). –