https://github.com/mankind/Rails-3-engine-example/blob/master/lib/dummy.rb

я есть приложение 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). Используя последние Rails из Git (7c920631ec3b314cfaa3a60d265de40cba3e8135).

Ответы на вопрос(3)

Ваш ответ на вопрос