`
liuqiang
  • 浏览: 162665 次
  • 性别: 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的最新开发...

    使用sitemap_generator来为rails网站生成Sitemap

    `sitemap_generator` gem 是一个适用于Ruby on Rails框架的开源工具,它能够自动扫描你的Rails应用,生成包含所有路由的Sitemap。安装这个gem非常简单,只需要在Gemfile中添加以下行: ```ruby gem 'sitemap_...

    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。 他住在包存储库中。 你只需要问他一次,然后他就收拾东西搬进你的硬盘。 确保你清理干净,他...

    ll-myship-generator:Rails实践应用

    在Rails中,生成器是一种强大的工具,它们可以自动创建模型、控制器、迁移文件等,从而减少手动编写重复代码的时间。 在Rails项目中,我们通常会遇到以下核心组件: 1. **模型(Models)**:这是业务逻辑的主要...

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

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

    rails-sample-blog:一个简单的跟踪Rails官方指南的博客教程

    3. **生成资源**:Rails的命令行工具(Rails Generator)能快速生成MVC结构的代码骨架。例如,`rails generate scaffold`命令可以自动生成与文章相关的模型、控制器、视图和迁移文件。 4. **ActiveRecord**:这是...

    kemalyst-generator:Kemalyst之类的Rails命令行

    【kemalyst-generator:Kemalyst的Rails命令行工具】 Kemalyst-generator是针对Kemalyst框架的一个命令行工具,它的设计灵感来源于Ruby on Rails中的scaffold生成器,旨在加速和简化Kemalyst应用的开发过程。...

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

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

    Laravel开发-laravel5-crud-generator

    在本文中,我们将深入探讨基于Laravel框架的CRUD(Create, Read, Update, Delete)生成器,特别是在...无论你是个人开发者还是团队的一员,`laravel-crud-generator`都能为你的Laravel 5项目带来显著的效率提升。

    website-generator:Trustious 的自动网站生成器

    "website-generator: Trustious 的自动网站生成器"是一款基于Ruby语言开发的工具,主要用于快速、高效地...如果你熟悉Ruby和Rails,你可以通过查看源代码进一步了解其内部工作原理,并根据自己的需求进行定制和扩展。

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

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

    rubyonrails源码下

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

Global site tag (gtag.js) - Google Analytics