从gem添加Rails控制器

时间:2012-06-02 11:31:45

标签: ruby-on-rails ruby ruby-on-rails-3 rubygems

我正在为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

谢谢:)

3 个答案:

答案 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.rb
module 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 :samplesresource :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/