tutorial sesiones rails ruby-on-rails ruby-on-rails-3 url-routing rails-routing rails-engines

ruby-on-rails - sesiones - ruby on rails tutorial pdf



¿Cómo puedo hacer que las rutas de un motor de Rails 3 estén disponibles para la aplicación host? (3)

Cambie config.routes en su motor para:

Rails.application.routes.draw do # NOT MyEngineName::Engine.routes.draw resources :classrooms end

Como lo tiene, las rutas solo están disponibles en el espacio de nombres MyEngineName::Engine y no en el resto de la aplicación de rieles de host.

Solía ​​haber una publicación de blog con más información, pero desafortunadamente ya no está disponible:

Tengo una aplicación Rails 3 con varios motores que contienen funcionalidad adicional. Cada motor es un servicio separado al que los clientes pueden comprar acceso.

Sin embargo, tengo 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 la 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

intentando 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 a classrooms_path desde cualquier otra vista produce el mismo error. Sin embargo, MyEngineName::Engine.routes.url_helpers.classrooms_path llamar a MyEngineName::Engine.routes.url_helpers.classrooms_path y hacer que funcione. Estoy pensando que podría haber definido mal las rutas, pero no puedo encontrar otra manera que funcione.

Intenté ejecutar la aplicación con Passenger (módulo independiente y módulo de Apache) y WEBrick (servidor de rieles). Usando los últimos Rieles de Git ( 7c920631ec3b314cfaa3a60d265de40cba3e8135 ).



Tuve el mismo problema, y ​​encontré esto en la documentation :

Como ahora puede montar un motor dentro de las rutas de la aplicación, no tiene acceso directo a url_helpers del motor dentro de la aplicación. Cuando monta un motor en las rutas de una aplicación, se crea un ayudante especial que le permite hacerlo. Considere tal escenario:

# config/routes.rb MyApplication::Application.routes.draw do mount MyEngine::Engine => "/my_engine", :as => "my_engine" get "/foo" => "foo#index" end

Ahora, puede utilizar el ayudante my_engine dentro de su aplicación:

class FooController < ApplicationController def index my_engine.root_url #=> /my_engine/ end end