如何在Ruby on Rails gem中包含一个控制器?

时间:2011-12-31 16:17:42

标签: ruby-on-rails ruby rubygems gem ruby-on-rails-plugins

我正在尝试为开源项目做贡献,我需要一个控制器来处理需要提交的几种表单。

我在gem中名为app/controllers/gemname/my_controller.rb的目录中创建了这些控制器。

然而,当我尝试访问控制器时,似乎没有加载(我得到一个名称错误,就像我输入类似NonExistentController的东西)。

如何使用gem加载我的控制器?

谢谢!

2 个答案:

答案 0 :(得分:10)

假设您的gem名为MyGem,并且您有一个名为SuperController的控制器,您希望在该应用中使用它。您的控制器应定义为:

module MyGem
  class SuperController < ApplicationController
    def whatever
      ...
    end
  end
end

并且在您的gem目录中,它应该位于app/controllers/my_gem/super_controller.rb not 位于lib文件夹下)。查看source for Devise,因为他们做同样的事情。

[编辑]您可以从A Guide To Starting Your Own Rails Engine Gem了解有关当前项目的内容。

答案 1 :(得分:0)

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
(&gt; Rails 3.0)

Rails官方指南(边缘):
http://edgeguides.rubyonrails.org/engines.html
http://edgeguides.rubyonrails.org/plugins.html

旧引擎x:
https://github.com/josevalim/enginex
(仅限3.0)