怎么写宝石?准备' lib'目录

时间:2014-06-27 11:20:17

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

你能解释一下吗?我想为我自己创造一个宝石,只是为了自学。

为此,我在'lib'文件夹中写了gem的代码,我可以在我的应用程序中测试它。

目前,我有下一个问题:

  1. 我如何扩展'观点'?我想创建单独的布局。
  2. 我如何扩展控制器?例如 - 应用程序控制器,我想用几种方法扩展它。
  3. 现在我已经扩展了我的用户模型,如下所示:

    #app/models/user.rb
    class User < ActiveRecord::Base
      require 'auth'
    ...
    
    
    
    #lib/auth.rb
    class User
      require 'digest'
    
      before_save :encrypt_password
    
      def xxx
    ....
    

    是对的吗?

    目前,我需要扩展应用程序控制器并添加另一个应用程序布局,但不知道如何。

1 个答案:

答案 0 :(得分:1)

如果您愿意,可以查看gem I made

-

<强>宝石

Rails gems基本上只是Rails应用程序的zip文件

当你“安装”rails gem时,gem中的gem文件实际上会被放入你的Rails应用程序中。以我们的宝石为例:

enter image description here

安装gem时,以红色标记的文件夹将插入到Rails应用程序中。你看不到他们,但他们会在那里


<强>引擎

我认为大多数Rails gems都是engines

这意味着无论何时创建gem,您所做的只是创建一个特定的功能,可以根据需要应用于您的应用程序

gem将创建一个module,它将包装您gem的所有功能。此module将在您创建的lib文件中定义,因此您可以通过继承此模块来扩展gem的功能


观看/控制器

要在您的应用中创建views / controllers,您需要记住我所说的内容 - 您gem中的文件将被放入您的应用

考虑到这一点,这样做的方法是创建一个/app文件夹,然后将viewscontrollers目录放在那里:

enter image description here

您基本上需要创建从您在gem的lib目录中定义的模块继承的目录:

-app
|-controllers
|--exception_handler
|---exception_controller.rb

|- views
|-- exception_handler
|--- exception
|---- show.html.erb

-lib
|-exception_handler.rb #-> ExceptionHandler module

这与您namespace路线

完全相同

-

当我创建了一个宝石时,你最好直接和我谈谈这个过程。如果您想进一步讨论,可以发表评论