`
hideto
  • 浏览: 2690733 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Rails宝典之第五十八式: 怎样写Generator

    博客分类:
  • Ruby
阅读更多
来看看怎样写自己的Generator吧

首先运行:
ruby script/generate

console中的输出可以看到Rails默认的generate:
Installed Generators
  Builtin: controller, integration_test, mailer, migration, model, observer, plugin, resource, scaffold,
scaffold_resource, session_migration, web_service

我们创建本机的generators目录:
mkdir -p ~/.rails/generators/app_layout

或者在某个rails项目里创建私有的generators:
mkdir -p /Users/demo/rails/simple/generators/app_layout


Generators有带参数和不带参数两种,先来看不带参数的Generator:
app_layout
--app_layout_generator.rb
--USAGE
  templates
----stylesheet.css
----layout.rhtml

我们看看不带参数的Generator的写法:
class AppLayoutGenerator < Rails::Generator::Base
  def manifest
    record do |m|
      m.file "layout.rhtml", "app/views/layouts/application.rhtml"
      m.file "stylesheet.css", "public/stylesheets/application.css"
    end
  end
end

我们的AppLayoutGenerator继承与Rails::Generator::Base,它的功能相当于cp layout.rhtml和stylesheet.css到后面的文件

我们再运行ruby script/generate看看:
Installed Generators
  User: app_layout
  Builtin: controller, integration_test, mailer, migration, model, observer, plugin, resource, scaffold,
scaffold_resource, session_migration, web_service

OK,我们看到除了Builtin的Generators,我们刚才创建的本机的app_layout这个Generator也出现在User Generators里

我们这样来使用它:
ruby script/generate app_layout

我们看到console打印出如下信息:
    create app/views/layouts/application.rhtml
    create public/stylesheets/application.css

系统自动创建了上面两个文件,内容为我们的app_layout/templates目录下的两个文件

如果我们想使用ruby script/generate app_layout home这样的方式,用home参数来指定创建home.rhtml和home.css,
我们该怎样写我们的Generator呢?
答案是继承Rails::Generator::NamedBase
class AppLayoutGenerator < Rails::Generator::NamedBase
  def manifest
    record do |m|
      m.template "layout.rhtml", "app/views/layouts/#{file_name}.rhtml"
      m.file "stylesheet.css", "public/stylesheets/#{file_name}.css"
    end
  end
end

除了使用m.template,我们还要修改layout.rhtml:
<html>
  <head>
    <title>Untitled</title>
    <%%= stylesheet_link_tag '<%= file_name %>' %>
    <%%= javascript_include_tag :defaults %>
  </head>
  <body>
    <div id="container">
      <%% flash.each do |name, msg| %>
        <%%= content_tag :div, msg, :id => "flash_#{name}" %>
      <%% end %>
      <%%= yield %>
    </div>
  </body>
</html>

这里的template使用<%% %>而不是<% %>
我们可以看看Rails源码/railties/lib/rails_generator/generators/components/scaffold/templates/layout.html.erb:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
  <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
  <title><%= controller_class_name %>: <%%= controller.action_name %></title>
  <%%= stylesheet_link_tag 'scaffold' %>
</head>
<body>

<p style="color: green"><%%= flash[:notice] %></p>

<%%= yield  %>

</body>
</html>
分享到:
评论
2 楼 hideto 2008-12-31  
启动加载文件里调用不就行了,environment.rb或boot.rb等等
1 楼 qipei 2008-12-31  
我有个问题请教一下.
我写了一个Generator. 我想让它在服务器启动时自动执行一次.
不知道在install这个文件里怎么写呀?

相关推荐

    Rails的精简版本Rails::API.zip

    Rails::API 是 Rails 的精简版本,针对不需要使用完整 Rails 功能的开发者。 Rails::API 移除了 ActionView 和其他一些渲染功能,不关心Web前端的开发者可更容易、快速地开发应用程序,因此运行速度比正常的 Rails ...

    Rails上的API:使用Rails构建REST APIAPIs on Rails: Building REST APIs with Rails

    在本篇内容中,我们将深入探讨如何利用Ruby on Rails(简称Rails)这一强大的Web应用程序框架来构建可伸缩且易于维护的RESTful API。Rails以其简洁优雅的语法、高效的开发速度以及良好的社区支持而闻名,这使得它...

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

    **Rails 常用插件简介 - CRUD Generator 2** 在Ruby on Rails框架中,开发过程中经常需要创建、读取、更新和删除(CRUD)数据。为了提高开发效率,开发者通常会使用各种插件来自动化这个过程。CRUD Generator 2就是...

    Rails中应用Ext.tree:以中国的省市地区三级联动选择为例

    在Ruby on Rails(Rails)框架中,开发人员经常需要实现各种...通过学习这个实例,开发者可以掌握如何在Rails应用中集成第三方库,处理层级数据,以及创建交互式的前端界面。这对于提升Web应用的用户体验非常有价值。

    使用sitemap_generator来为rails网站生成Sitemap

    在IT行业中,搜索引擎优化(SEO)是提升网站可见度的关键因素之一,而Sitemap则是SEO策略中的重要组成部分。Sitemap Generator 是一个工具,用于自动创建网站的Sitemap XML文件,帮助搜索引擎更好地理解和索引网站...

    Ruby on Rails Guides v2 - Ruby on Rails 4.2.5

    ### Ruby on Rails Guides v2 - Ruby on Rails 4.2.5 #### 一、重要概念及基础假设 - **重要概念**:本指南旨在帮助读者深入理解Ruby on Rails(以下简称Rails)4.2.5版本的核心功能与最佳实践。 - **基础假设**:...

    Ruby on Rails入门经典代码

    Ruby on Rails,简称Rails,是基于Ruby语言的一个开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,旨在使Web开发过程更加高效、简洁。本压缩包中的"Ruby on Rails入门经典代码"提供了新手学习...

    Rails 101 入门电子书

    - 学习如何创建第一个Rails应用程序。 - **过程**: - 创建新项目。 - 设置数据库配置。 - 创建控制器和视图。 - 在浏览器中查看结果。 #### 六、Rails的路由 - **概念介绍**: 路由是连接用户请求URL与应用...

    Ruby on Rails入门例子

    Ruby on Rails,简称Rails,是一种基于Ruby语言的开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,旨在使Web开发过程更加高效、简洁。本篇将通过一个入门实例,深入探讨Rails的基本概念和核心...

    Rails相关电子书汇总

    标题 "Rails相关电子书汇总" 暗示了这个压缩包包含了关于Ruby on Rails框架的电子书籍资源。Ruby on Rails,通常简称为Rails,是一个基于Ruby语言的开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,以...

    Advanced Rails

    9. **Rails最佳实践**:了解并遵循Rails社区的最佳实践,如代码风格、设计模式和重构技巧,有助于写出更高质量的代码。 10. **Rails社区与工具**:熟悉Rails社区的资源,如Stack Overflow、GitHub上的开源项目,...

    Rails 101S

    ### Rails 101S: 初学者必备的Ruby on Rails 宝典 #### Introduction: 深入了解Ruby on Rails 《Rails 101S》是一本为Ruby on Rails初学者准备的手册,旨在帮助新手快速入门并掌握基本的开发技能。本手册将从最...

    [Rails] Crafting Rails Applications (英文版)

    [Pragmatic Bookshelf] Crafting Rails Applications Expert Practices for Everyday Rails Development (E-Book) ☆ 图书概要:☆ Rails 3 is a huge step forward. You can now easily extend the framework, ...

    webpack-rails, 将 web pack与你的Ruby on Rails 应用程序集成.zip

    webpack-rails, 将 web pack与你的Ruby on Rails 应用程序集成 不再维护webpack-rails 不再被维护。 有关详细信息,请参阅 #90. web pack-railsweb pack 为你提供了将 web pack集成到现有的Ruby on Rails 应用程序中...

    rails指南 中文版

    Rails指南中文版是针对Ruby on Rails框架的一份详尽教程,旨在帮助开发者深入理解并熟练掌握这个强大的Web应用开发工具。Ruby on Rails(简称Rails)是一个基于Ruby语言的开源Web应用框架,它遵循MVC(Model-View-...

    Rails项目源代码

    Ruby on Rails,通常简称为Rails,是一个基于Ruby编程语言的开源Web应用框架,遵循MVC(Model-View-Controller)架构模式。这个“Rails项目源代码”是一个使用Rails构建的图片分享网站的完整源代码,它揭示了如何...

    java基础之rails命令大全.pdf

    ### Java基础之Rails命令大全知识点解析 #### 一、Rails 命令概述 Rails 是一个用于 Web 开发的框架,它基于 Ruby 语言。Rails 遵循 MVC(Model-View-Controller)架构模式,使得 Web 应用程序的开发更加高效、简洁...

Global site tag (gtag.js) - Google Analytics