在多个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
以上代码的要点
1 directory 方法:创建文件夹,如果所需的文件夹不存在
2 file方法:拷贝一些文件到给定的文件夹
3 migration_template 方法:拷贝给定的migration文件(根据底部的file_name方法)到db/migrations文件夹
4 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"
分享到:
相关推荐
CRUD Generator 2就是这样一个工具,它是一个基于Edge Rails(Rails的开发版本)的高级生成器,旨在简化模型和控制器的CRUD操作的创建。 **1. Edge Rails与Rails稳定版的区别** Edge Rails指的是Rails的最新开发...
首先,您需要创建一个扩展文件夹。 打开您的扩展程序文件夹。 Mac OS X: ~/Library/Application Support/StarUML/extensions/user Windows: C:\Users\<user>\AppData\Roaming\StarUML\extensions\user Linux: ...
Rails的许多设计原则和工具都直接支持这种敏捷工作流程,如自动化测试、DHH(David Heinemeier Hansson)提出的"约定优于配置"原则以及强大的开发工具如Rails console和Rails generator。 本书的英文版可能包含以下...
6. **Scaffolding**:Rails 2.0的生成器工具(generator)提供了一种快速创建基本CRUD(创建、读取、更新、删除)操作的手段,即scaffold,它可以帮助开发者快速搭建应用的基础结构。 7. **Metal**:Rails 2.0引入...
基本上,他戴着大礼帽,住在你的电脑里,等着你告诉他你想创建什么样的应用程序。 并非每台新计算机都预装了 Yeoman。 他住在包存储库中。 你只需要问他一次,然后他就收拾东西搬进你的硬盘。 确保你清理干净,他...
*的用法首先,使用常规的rails命令创建Ruby on Rails项目,但将其跳过: $ rails new app-name --skip-bundle 最后,启动生成器: $ cd app-name$ yo rails-mithril 对所有“覆盖”操作回答“是”。 如果您使用的...
发电机导轨角度要求 发电机 入门 要运行此版本的yeoman generator。 首先,请确保您已经安装了...首先,使用常规的rails命令创建Ruby on Rails项目,但将其跳过: $ rails new app-name --skip-bundle 最后,启动生
基本上,他戴着大礼帽,住在你的电脑里,等着你告诉他你想创建什么样的应用程序。 并非每台新计算机都预装了 Yeoman。 他住在包存储库中。 你只需要问他一次,然后他就收拾东西搬进你的硬盘。 确保你清理干净,他...
使用Rails生成Golang代码或管理Go... gem 'go-on-rails' , '~> 0.4.0' 然后执行: $ bundle 或自己安装为: $ gem install go-on-rails用法您必须拥有一个现有的Rails应用程序或创建一个新应用程序,然后才能尝试使用
gem 'grape-api-generator' 然后运行bundle命令来安装它。 安装gem之后,您可以运行install生成器以生成基本的MyApp API结构: rails generate grape:install my_app 您还可以在生成器中指定 API 版本和身份...
Kamigo 提供了重要的generator,让你开发聊天机器人时可以快的跟飞一样。 以下将说明如何使用Kamigo 来制作Todo 的教学文件。 建立新的rails 专案 将以下指令全部复制,直接贴到bash 执行即可。 # 建立新專案 ...
6. **Rails Generator** Rails的生成器用于快速创建新控制器、模型、迁移等。源代码可能包含由`rails generate`命令生成的文件,这有助于了解生成器的工作方式和Rails项目的结构。 7. **数据库迁移** 数据库迁移...
自述 此自述文件通常会记录启动和运行应用程序所需的...数据库创建 数据库初始化 如何运行测试套件 服务(作业队列、缓存服务器、搜索引擎等) 部署说明 … 如果您不打算运行rake doc:app请随意使用不同的标记语言。
您可能想要涵盖的内容: Ruby版系统依赖配置数据库创建数据库初始化如何运行测试套件服务(作业队列、缓存服务器、搜索引擎等) 部署说明… 如果您不打算运行rake doc:app请随意使用不同的标记语言。
简单的 Rails 生成器在 lib 目录中创建一个具有匹配规范的类。 安装 将此行添加到应用程序的 Gemfile 中: gem 'lib-generator' 然后执行: $ bundle 或者自己安装: $ gem install lib-generator 用法 像任何...
VersaCommerce App Generator 适用于Rails 3.x和Rails 4.x的VersaCommerce应用程序生成器 描述 这个宝石使使用VersaCommerce API轻松启动和运行Rails 3.x或Rails 4.x应用程序变得容易。 生成器创建一个用于向您的...
在Ruby on Rails中,开发者经常使用这样的工具来快速设置模型,这些模型对应于数据库表,并且自动实现CRUD(创建、读取、更新、删除)操作。 标签“ActiveRecord”进一步确认了这个压缩包与数据库建模和Ruby on ...
在Ruby on Rails中,通常会通过生成器(Generator)快速构建基础结构,例如,可以使用`rails new`命令来创建一个新的Rails项目。在这个例子中,"depot"可能是项目的名字,它代表了一个基本的Rails应用实例。 在...
可以使用Rails Generator创建控制器,例如生成一个名为`PostsController`的控制器。 **运行应用程序** 完成上述步骤后,可以通过运行应用来查看结果。在NetBeans IDE中,通常有内置的服务器支持,可以方便地启动和...