`
liuqiang
  • 浏览: 159339 次
  • 性别: Icon_minigender_1
  • 来自: 华东
社区版块
存档分类
最新评论

创建你自己的rails generator

    博客分类:
  • Ruby
阅读更多

在多个rails项目中,有时需要共享一些公用的component ,如果你不想通过拷贝文件的方式共享这些文件,那么自己动手是一种灵活而且很cool的方法。

以blog组件为例,过程如下


在lib下添加一个generators 的文件夹,再创建了一个blog的文件夹,这里有2个比较重要的东西,一个是生成器,一个是模板,简单的理解,生成器负责文件的拷贝,模板持有需要被拷贝的文件。

偶们先来看看生成器blog_generator.rb

 

class BlogGenerator < Rails::Generator::Base  
  def manifest  
    record do |m|  
  
      # Controllers  
      m.file "controllers/blog_controller.rb", "app/controllers/blog_controller.rb"  
  
      # Models  
      m.file "models/blog_post.rb", "app/models/blog_post.rb"  
  
      # Helpers  
      m.file "helpers/blog_helper.rb", "app/helpers/blog_helper.rb"  
  
      # Views  
      m.directory "app/views/blog"  
      m.file "views/index.html.erb", "app/views/blog/index.html.erb"  
      m.file "views/details.html.erb", "app/views/blog/details.html.erb"  
      m.file "views/feed.rss.builder", "app/views/blog/feed.rss.builder"  
  
      # Migration  
      m.migration_template "migrate/create_blog.rb", "db/migrate"  
  
      # Tests  
      m.file "test/fixtures/blog_posts.yml", "test/fixtures/blog_posts.yml"  
      m.file "test/functional/blog_controller_test.rb", "test/functional/blog_controller_test.rb"  
      m.file "test/unit/blog_post_test.rb", "test/unit/blog_post_test.rb"  
  
      # CSS and images  
      m.file "assets/blog_styles.css", "public/stylesheets/px_blogger.css"  
      m.file "assets/comment_add.gif", "public/images/comment_add.gif"  
      m.file "assets/comment.gif", "public/images/comment.gif"  
  
      m.readme "INSTALL"  
    end  
  end  
  
  def file_name  
    "create_blog"  
  end  
  
end  

 

 以上代码的要点

 

directory 方法:创建文件夹,如果所需的文件夹不存在

file方法:拷贝一些文件到给定的文件夹

 migration_template 方法:拷贝给定的migration文件(根据底部的file_name方法)到db/migrations文件夹

readme方法打印一些安装文件的内容

 

完毕后,文件结构应该如下所示

 

 

lib  
\- generators  
   \- blog  
      \- blog_generator.rb  
         templates  
         \- assets  
            \- blog_styles.css  
               comment_add.gif  
               comment.gif  
            controllers  
            \- blog_controller.rb  
            helpers  
            \- blog_helper.rb  
            INSTALL  
            migrate  
            \- create_blog.rb  
            models  
            \- blog_post.rb  
            test  
            \- fixtures  
               \- blog_posts.yml  
               functional  
               \- blog_controller_test.rb  
               unit  
               \- blog_post_test.rb  
            views  
            \- index.html.erb  
               details.html.erb  
               feed.rss.builder  
         USAGE  
  

执行 script/generate blog 将会触发生成器运行.

 

另外你可以写出更高级一点的生成器,如果你的生成器继承Rails::Generator::NamedBase 而不是Rails::Generator::Base 的话,那么 你可以利用 template method 向模板传递参数,比如你运行script/generate Account,那么class_name (返回 “Account”) and file_name (返回 “account”),你需要修改你的控制器模板

 

class <%= class_name %>Controller < ApplicationController.

 

 

并且修改你的manifest

 

m.template "controllers/user_controller.rb", "app/controllers/#{file_name}_controller.rb"
 

 

分享到:
评论
1 楼 机器人 2010-01-27  
很好, 不过Rails3中还要cool一些。

相关推荐

    [Rails 常用插件简介]CRUD Generator 2

    CRUD Generator 2就是这样一个工具,它是一个基于Edge Rails(Rails的开发版本)的高级生成器,旨在简化模型和控制器的CRUD操作的创建。 **1. Edge Rails与Rails稳定版的区别** Edge Rails指的是Rails的最新开发...

    StarUML2-Rails-Generators:用于StarUML2类图的Rails generator generator

    首先,您需要创建一个扩展文件夹。 打开您的扩展程序文件夹。 Mac OS X: ~/Library/Application Support/StarUML/extensions/user Windows: C:\Users\&lt;user&gt;\AppData\Roaming\StarUML\extensions\user Linux: ...

    使用 rails进行敏捷开发(第三版)

    Rails的许多设计原则和工具都直接支持这种敏捷工作流程,如自动化测试、DHH(David Heinemeier Hansson)提出的"约定优于配置"原则以及强大的开发工具如Rails console和Rails generator。 本书的英文版可能包含以下...

    ruby on rails2.0本地安装包

    6. **Scaffolding**:Rails 2.0的生成器工具(generator)提供了一种快速创建基本CRUD(创建、读取、更新、删除)操作的手段,即scaffold,它可以帮助开发者快速搭建应用的基础结构。 7. **Metal**:Rails 2.0引入...

    generator-marionette-rails:环境 Marionette to Rails 的脚手架生成器

    基本上,他戴着大礼帽,住在你的电脑里,等着你告诉他你想创建什么样的应用程序。 并非每台新计算机都预装了 Yeoman。 他住在包存储库中。 你只需要问他一次,然后他就收拾东西搬进你的硬盘。 确保你清理干净,他...

    generator-rails-mithril:将mithril.js和require.js与Ruby on Rails项目集成的快速方法

    *的用法首先,使用常规的rails命令创建Ruby on Rails项目,但将其跳过: $ rails new app-name --skip-bundle 最后,启动生成器: $ cd app-name$ yo rails-mithril 对所有“覆盖”操作回答“是”。 如果您使用的...

    generator-rails-angular-require:将Angular.js和require.js与Ruby on Rails项目集成的快速方法

    发电机导轨角度要求 发电机 入门 要运行此版本的yeoman generator。 首先,请确保您已经安装了...首先,使用常规的rails命令创建Ruby on Rails项目,但将其跳过: $ rails new app-name --skip-bundle 最后,启动生

    generator-react-rails:使用 react.js 的 Rails 项目的 Yeoman 生成器

    基本上,他戴着大礼帽,住在你的电脑里,等着你告诉他你想创建什么样的应用程序。 并非每台新计算机都预装了 Yeoman。 他住在包存储库中。 你只需要问他一次,然后他就收拾东西搬进你的硬盘。 确保你清理干净,他...

    go-on-rails:使用Rails开发或生成Golang应用程序

    使用Rails生成Golang代码或管理Go... gem 'go-on-rails' , '~&gt; 0.4.0' 然后执行: $ bundle 或自己安装为: $ gem install go-on-rails用法您必须拥有一个现有的Rails应用程序或创建一个新应用程序,然后才能尝试使用

    grape-api-generator:葡萄的Rails生成器脚本集合

    gem 'grape-api-generator' 然后运行bundle命令来安装它。 安装gem之后,您可以运行install生成器以生成基本的MyApp API结构: rails generate grape:install my_app 您还可以在生成器中指定 API 版本和身份...

    kamigo:基于 Rails 的聊天机器人框架

    Kamigo 提供了重要的generator,让你开发聊天机器人时可以快的跟飞一样。 以下将说明如何使用Kamigo 来制作Todo 的教学文件。 建立新的rails 专案 将以下指令全部复制,直接贴到bash 执行即可。 # 建立新專案 ...

    rubyonrails源码下

    6. **Rails Generator** Rails的生成器用于快速创建新控制器、模型、迁移等。源代码可能包含由`rails generate`命令生成的文件,这有助于了解生成器的工作方式和Rails项目的结构。 7. **数据库迁移** 数据库迁移...

    tiles-generator-rails-coffeescript

    自述 此自述文件通常会记录启动和运行应用程序所需的...数据库创建 数据库初始化 如何运行测试套件 服务(作业队列、缓存服务器、搜索引擎等) 部署说明 … 如果您不打算运行rake doc:app请随意使用不同的标记语言。

    tiles-generator-rails-javascript

    您可能想要涵盖的内容: Ruby版系统依赖配置数据库创建数据库初始化如何运行测试套件服务(作业队列、缓存服务器、搜索引擎等) 部署说明… 如果您不打算运行rake doc:app请随意使用不同的标记语言。

    lib-generator:生成lib类

    简单的 Rails 生成器在 lib 目录中创建一个具有匹配规范的类。 安装 将此行添加到应用程序的 Gemfile 中: gem 'lib-generator' 然后执行: $ bundle 或者自己安装: $ gem install lib-generator 用法 像任何...

    versacommerce_app:这个宝石使使用VersaCommerce API轻松启动和运行Rails 3.1或Rails 4.0应用程序变得容易

    VersaCommerce App Generator 适用于Rails 3.x和Rails 4.x的VersaCommerce应用程序生成器 描述 这个宝石使使用VersaCommerce API轻松启动和运行Rails 3.x或Rails 4.x应用程序变得容易。 生成器创建一个用于向您的...

    ActiveRecordGenerator_exe_2007-10-26.zip

    在Ruby on Rails中,开发者经常使用这样的工具来快速设置模型,这些模型对应于数据库表,并且自动实现CRUD(创建、读取、更新、删除)操作。 标签“ActiveRecord”进一步确认了这个压缩包与数据库建模和Ruby on ...

    RubyOnRails的一个入门小例子

    在Ruby on Rails中,通常会通过生成器(Generator)快速构建基础结构,例如,可以使用`rails new`命令来创建一个新的Rails项目。在这个例子中,"depot"可能是项目的名字,它代表了一个基本的Rails应用实例。 在...

    RoR,十分钟做Blog

    可以使用Rails Generator创建控制器,例如生成一个名为`PostsController`的控制器。 **运行应用程序** 完成上述步骤后,可以通过运行应用来查看结果。在NetBeans IDE中,通常有内置的服务器支持,可以方便地启动和...

Global site tag (gtag.js) - Google Analytics