我正在开发一个专门用于Rails应用程序的
rubygem,我想从我的gem添加一个控制器,以便它可以在Rails应用程序上使用(类似于
devise与RegistrationsController,SessionsController).
宝石方面:
我已经尝试添加以下内容
应用程序/控制器/ samples_controller.rb
class SamplesController < ApplicationController def index . . end end
然后在我的轨道路线上添加它作为:
match 'route' => 'samples#index'
要么
resources :samples
显然我在那里有些错误,但我不知道是什么?我需要明确地要求我的SampleController在某个地方或应用程序的初始化程序吗?
现在我在访问路由时收到此错误
uninitialized constant SamplesController
谢谢 :)
解决方法
让我们假设你的宝石叫做MyGem,你有一个控制器叫做SamplesController你想在应用程序中使用.您的控制器应定义为:
module MyGem class SamplesController < ApplicationController def whatever ... end end end
在你的gem目录中,它应该存在于app / controllers / my_gem / samples_controller.rb(不在lib文件夹下).
然后在您的宝石lib / my_gem文件夹中使用代码创建engine.rb
module MyGem class Engine < Rails::Engine; end end
您可以通过在配置文件夹中使用代码创建routes.rb来在您的gem中写入路由
# 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
而已.