Я только что создал свой первый двигатель.Он добавляет пару новых маршрутов, таких как:
Rails.application.routes.draw do
scope :module => 'contact' do
get "contact", :to => 'contacts#new'
get "contact/send_email", :to => 'contacts#send_email', :as => 'send_email'
end
end
Затем в /websites/Engines/contact/app/controllers/contacts_controller.rb, у меня есть:
module Contact
class ContactsController < ApplicationController
# Unloadable marks your class for reloading between requests
unloadable
def new
@contact_form = Contact::Form.new
end
def send_email
@contact_form = Contact::Form.new(params[:contact_form])
if @contact_form.valid?
Notifications.contact(@contact_form).deliver
redirect_to :back, :notice => 'Thank you! Your email has been sent.'
else
render :new
end
end
end
end
Iзагрузил его в консоль клиентского приложения, чтобы доказать, что некоторые основы работают, и быстро получил эту ошибку загрузки (которую я затем подтвердил, воспроизведя проблему в браузере):
ruby-1.8.7-p302 > Contact::Form.new
=> #<Contact::Form:0x2195b70>
ruby-1.8.7-p302 > app.contact_path
=> "/contact"
ruby-1.8.7-p302 > r = Rails.application.routes; r.recognize_path(app.contact_path)
LoadError: Expected /websites/Engines/contact/app/controllers/contacts_controller.rb to define ContactsController
И вот она у вас;/ contact попадает в файл contacts_controller.rb, но тот факт, что контроллер находится внутри модуля Contact, делает его неузнаваемым.
Что я делаю не так?