【问题标题】:How to write a gem? Preparing with 'lib' directory如何写一个宝石?准备“lib”目录
【发布时间】:2014-06-27 11:20:17
【问题描述】:

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

为此,我在“lib”文件夹中编写 gem 的代码,我可以在我的应用程序中对其进行测试。

现在,我有下一个问题:

  1. 如何扩展“视图”?我想创建单独的布局。
  2. 如何扩展控制器?例如 - 应用程序控制器,我想用一些方法来扩展它。

现在我已经扩展了我的用户模型,如下所示:

#app/models/user.rb
class User < ActiveRecord::Base
  require 'auth'
...



#lib/auth.rb
class User
  require 'digest'

  before_save :encrypt_password

  def xxx
....

这样对吗?

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

【问题讨论】:

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


【解决方案1】:

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

--

宝石

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

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

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


引擎

我认为大多数 Rails gems 将是 engines

这意味着每当您创建gem 时,您所做的只是创建可根据需要应用于您的应用程序的特定功能

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


视图/控制器

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

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

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

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

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

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

这和namespace你的路线完全一样

--

因为我已经创建了一个 gem,你最好直接和我谈谈这个过程。如果您想进一步讨论,可以发表评论

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多