Mam aplikację Rails 3 z kilkoma silnikami zawierającymi dodatkowe funkcje. Każdy silnik jest osobną usługą, do której klienci mogą nabyć dostęp.Jak udostępnić trasy z silnika Rails 3 do aplikacji hosta?
Mam jednak problem z trasami z silników, które nie są łatwo dostępne dla kontrolerów i widoków.
kontroler:
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
w silniku:
MyEngineName::Engine.routes.draw do
resources :classrooms
end
config/routes.rb
w aplikacji:
Seabed::Application.routes.draw do
mount MyEngineName::Engine => '/engine'
...
end
lib/my_engine_name.rb
w silniku:
module MyEngineName
class Engine < ::Rails::Engine
end
end
próbuje przejść do /classrooms/new
wyników w
NoMethodError in Classrooms#new
Showing app/views/classrooms/_form.html.haml where line #1 raised:
undefined method `hash_for_classrooms_path' for #<Module:0x00000104cff0f8>
i próbuje wywołać classrooms_path
od innych wyników widok w tym samym błędem. Mogę jednak zadzwonić pod numer MyEngineName::Engine.routes.url_helpers.classrooms_path
i uruchomić go. Myślę, że mogłem źle zdefiniować trasy, ale nie mogę znaleźć innego sposobu, który działa.
Próbowałem uruchomić aplikację zarówno z Pasażerem (samodzielny i moduł Apache), jak iz WEBrick (serwer rails). Używanie najnowszych Railsów z Git (7c920631ec3b314cfaa3a60d265de40cba3e8135
).
to robić, usuwając mocowanie połączenia w moim app-tras i scopingu w maszynowni tras ('scope '/ engine' do') i wszystko działa. Wielkie dzięki :) – PerfectlyNormal
Fajnie, dziękuję za informacje o innych krokach, które trzeba wykonać, aby uruchomić pracę silnika. – bowsersenior
Dla Rails 3.1 i nowszych, usuń parametr 'map' do bloku (po prostu usuń całą część' | map | '). –