在多个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的最新开发...
`sitemap_generator` gem 是一个适用于Ruby on Rails框架的开源工具,它能够自动扫描你的Rails应用,生成包含所有路由的Sitemap。安装这个gem非常简单,只需要在Gemfile中添加以下行: ```ruby gem 'sitemap_...
首先,您需要创建一个扩展文件夹。 打开您的扩展程序文件夹。 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中,生成器是一种强大的工具,它们可以自动创建模型、控制器、迁移文件等,从而减少手动编写重复代码的时间。 在Rails项目中,我们通常会遇到以下核心组件: 1. **模型(Models)**:这是业务逻辑的主要...
使用Rails生成Golang代码或管理Go... gem 'go-on-rails' , '~> 0.4.0' 然后执行: $ bundle 或自己安装为: $ gem install go-on-rails用法您必须拥有一个现有的Rails应用程序或创建一个新应用程序,然后才能尝试使用
3. **生成资源**:Rails的命令行工具(Rails Generator)能快速生成MVC结构的代码骨架。例如,`rails generate scaffold`命令可以自动生成与文章相关的模型、控制器、视图和迁移文件。 4. **ActiveRecord**:这是...
【kemalyst-generator:Kemalyst的Rails命令行工具】 Kemalyst-generator是针对Kemalyst框架的一个命令行工具,它的设计灵感来源于Ruby on Rails中的scaffold生成器,旨在加速和简化Kemalyst应用的开发过程。...
gem 'grape-api-generator' 然后运行bundle命令来安装它。 安装gem之后,您可以运行install生成器以生成基本的MyApp API结构: rails generate grape:install my_app 您还可以在生成器中指定 API 版本和身份...
在本文中,我们将深入探讨基于Laravel框架的CRUD(Create, Read, Update, Delete)生成器,特别是在...无论你是个人开发者还是团队的一员,`laravel-crud-generator`都能为你的Laravel 5项目带来显著的效率提升。
"website-generator: Trustious 的自动网站生成器"是一款基于Ruby语言开发的工具,主要用于快速、高效地...如果你熟悉Ruby和Rails,你可以通过查看源代码进一步了解其内部工作原理,并根据自己的需求进行定制和扩展。
Kamigo 提供了重要的generator,让你开发聊天机器人时可以快的跟飞一样。 以下将说明如何使用Kamigo 来制作Todo 的教学文件。 建立新的rails 专案 将以下指令全部复制,直接贴到bash 执行即可。 # 建立新專案 ...
6. **Rails Generator** Rails的生成器用于快速创建新控制器、模型、迁移等。源代码可能包含由`rails generate`命令生成的文件,这有助于了解生成器的工作方式和Rails项目的结构。 7. **数据库迁移** 数据库迁移...