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

9
我正在尝试为一个开源项目做贡献,需要一个控制器来处理一些需要提交的表单。
我在宝石(gem)中的一个目录下创建了这些控制器,路径为app/controllers/gemname/my_controller.rb
但是,当我尝试访问控制器时,似乎没有加载(我得到一个名称错误,就像我输入了NonExistentController一样)。
如何使用宝石(gem)加载我的控制器?
谢谢!

1
你的MyController是否定义在Gemname模块内?如果没有,Rails会期望它被放置在app/controllers/my_controller.rb中。 - KL-7
请阅读此指南:http://guides.rubyonrails.org/plugins.html - taro
KL-7,我该如何在Gemname模块内定义MyController?taro,谢谢你的信息。我已经尝试过了,但那并没有包含我正在寻找的信息。 - Yuval Karmi
2个回答

11

假设您的 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 指南》 中了解关于你当前项目的一些知识。


非常感谢!我喜欢你提到的“指南链接”。 - Siwei
昨天我在为这个问题苦苦挣扎。我想今天会轻松得多。谢谢! - Rimian
@Brandon 在Rails 3和4之间,Rails Engines发生了多大的变化? - JagWire

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

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

旧版enginex:
https://github.com/josevalim/enginex
(仅限3.0)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接