Добавить контроллер Rails из драгоценного камня
Я разрабатываю rubygem специально для приложений Rails, и я хочу добавить контроллер из своего драгоценного камня, чтобы он был доступен в приложении Rails (похоже на devise работает с RegistrationsController, SessionController).
На стороне драгоценного камня:
Я попытался добавить следующее
приложение/контроллеры/samples_controller.rb
class SamplesController < ApplicationController
def index
.
.
end
end
И затем по моим маршрутам rails добавьте его либо как:
match 'route' => 'samples#index'
или
resources :samples
Очевидно, что у меня что-то не так, но я понятия не имею, что это? Нужно ли мне явно требовать моего SampleController где-нибудь или инициализатор в приложении?
Сейчас я получаю эту ошибку при доступе к маршруту
uninitialized constant SamplesController
Спасибо:)
Ответы
Ответ 1
Предположим, что ваш драгоценный камень называется MyGem, и у вас есть контроллер под названием SamplesController, который вы хотите использовать в приложении. Ваш контроллер должен быть определен как:
module MyGem
class SamplesController < ApplicationController
def whatever
...
end
end
end
и в вашем каталоге gem он должен жить в app/controllerlers/my_gem/samples_controller.rb(не под папкой lib).
Затем создайте engine.rb в папке gems lib/my_gem с кодом
module MyGem
class Engine < Rails::Engine; end
end
Вы можете писать маршруты внутри своего драгоценного камня, написав создание route.rb в папке config с кодом
# my_gem/config/routes.rb
Rails.application.routes.draw do
match 'route' => 'my_gem/samples#index'
end
Заключительная структура что-то вроде этого
## DIRECTORY STRUCTURE
#
- my_gem/
- app/
- controllers/
- my_gem/
+ samples_controller.rb
- config/
+ routes.rb
- lib/
- my_gem.rb
- my_gem/
+ engine.rb
+ version.rb
+ my_gem.gemspec
+ Gemfile
+ Gemfile.lock
Вот оно.
Ответ 2
Прежде всего, у вас есть опечатка в вашем коде: AppicationController
должен быть ApplicationController
.
Затем вы не следуете соглашениям об именах Rails (множественное число для ресурсов и т.д.):
- В ваших маршрутах это должно быть либо
resources :samples
, либо resource :sample
.
- Ваш класс контроллера должен быть
class SamplesController
и
- имя файла контроллера должно быть
samples_controller.rb
.
Следуйте соглашениям, и вы должны быть в порядке.
Ответ 3
чтобы настроить маршрут, создайте файл route.rb в каталоге конфигурации вашего проекта. Чтобы он совпал с образцом маршрута, выполните следующие действия:
конфигурации /routes.rb
Rails.application.routes.draw do
<resource definition here>
end
приложение/контроллеры/samples_controller.rb
module Samples
class SamplesController < ApplicationController
def index
.
.
end
end
end
Не забудьте включить модуль в контроллер приложения
include 'samples'
Вы посмотрели этот сайт:
http://coding.smashingmagazine.com/2011/06/23/a-guide-to-starting-your-own-rails-engine-gem/