【问题标题】:How to include a controller with a Ruby on Rails gem?如何在 Ruby on Rails gem 中包含控制器?
【发布时间】:2011-12-31 16:17:41
【问题描述】:

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

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

但是,当我尝试访问控制器时,它似乎没有被加载(我收到一个名称错误,就像我输入了 NonExistentController 之类的内容一样)。

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

谢谢!

【问题讨论】:

  • 您的MyController 是否在Gemname 模块中定义?如果不是 rails 会期望它被放置在app/controllers/my_controller.rb
  • KL-7,如何在 Gemname 模块中定义 MyController?芋头,谢谢你的信息。我做了,但它不包含我正在寻找的信息。

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


【解决方案1】:

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

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

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

[编辑] 你可以从A Guide To Starting Your Own Rails Engine Gem 那里学到一些关于你当前项目的东西。

【讨论】:

  • 非常感谢!我喜欢你提到的guide link
  • 我昨天一直在努力解决这个问题。我想今天会轻松很多。谢谢!
  • @Brandon Rails 引擎在 Rails 3 和 4 之间有多少变化?
【解决方案2】:

布兰登回答中的指南非常有帮助,但仅适用于 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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2017-08-21
    相关资源
    最近更新 更多