如何在Ruby on Rails gem中包含一个控制器?
我正在尝试为开源项目做贡献,我需要一个控制器来处理需要提交的几个表单。
我在gem内部的目录中创建了这些控制器,名为app/controllers/gemname/my_controller.rb
。
但是,当我尝试访问控制器时,似乎没有加载(我得到一个名称错误就像我输入类似NonExistentController的东西)。
如何使用gem加载我的控制器?
谢谢!
假设您的gem名为MyGem
并且您有一个名为SuperController
的控制器,您想在应用程序中使用它。 您的控制器应定义为:
module MyGem class SuperController < ApplicationController def whatever ... end end end
在你的gem目录中,它应该存在app/controllers/my_gem/super_controller.rb
( 不在 lib
文件夹下)。 检查Devise的来源,因为他们做同样的事情。
[编辑]您可以从关于当前项目的“开始自己的Rails引擎gem指南”中学到一些东西。
Brandon的答案中的指南非常有用,但仅适用于rails 3.0。 从3.1开始,您可以创建一个插件。 像这样: rails plugin new my_engine --mountable
请参阅此有用的指南:
http://namick.tumblr.com/post/17663752365/how-to-create-a-gemified-plugin-with-rails-3-2-rspec
(> Rails 3.0)
Rails官方指南(边缘):
http://edgeguides.rubyonrails.org/engines.html
http://edgeguides.rubyonrails.org/plugins.html
旧引擎:
https://github.com/josevalim/enginex
(仅限3.0)