我正在为Rails应用程序开发一个rubygem,我想从我的gem添加一个控制器,以便它可以在Rails应用程序上使用(类似于devise对RegistrationsController,SessionsController的作用。) p>
在宝石方面:
我尝试添加以下内容 应用程序/控制器/ samples_controller.rb
class SamplesController < ApplicationController
def index
.
.
end
end
然后在我的rails路线上将其添加为:
match 'route' => 'samples#index'
或
resources :samples
显然我在那里遇到了问题,但我不知道它是什么?我是否需要在某处明确要求我的SampleController或应用程序上的初始化程序?
现在我在访问路径时遇到此错误
uninitialized constant SamplesController
谢谢:)
答案 0 :(得分:21)
假设您的gem名为MyGem,并且您有一个名为SamplesController的控制器,您想在应用程序中使用它。您的控制器应定义为:
module MyGem
class SamplesController < ApplicationController
def whatever
...
end
end
end
并且在您的gem目录中它应该位于app / controllers / my_gem / samples_controller.rb(不在lib文件夹下)。
然后在gems lib / my_gem文件夹中使用代码
创建engine.rbmodule MyGem
class Engine < Rails::Engine; end
end
您可以通过在config文件夹中使用代码
编写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
多数民众赞成。
答案 1 :(得分:0)
首先,您的代码中存在拼写错误:AppicationController
应为ApplicationController
。
然后,您没有遵循Rails命名约定(资源等复数):
resources :samples
或resource :sample
。class SamplesController
和samples_controller.rb
。按照约定,你应该没事。
答案 2 :(得分:0)
设置路由,在项目的config目录中创建routes.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/