ruby有一个act as state machine的插件,可以实现工作流或者多步骤向导的功能。
state machine,是计算机科学里面一种模型,这个插件主要实现的是finite state machine,既有限状态自动机。
首先,AASM的安装:
config.gem "rubyist-aasm", :source => "http://gems.github.com", :lib => 'aasm'
安装好之后需要在你的Model里面加入
include AASM
下面是一个简单的例子。来介绍AASM的使用。
加入我们有一个person的model,一个person可以处于三种状态,sleeping, working 还有eating.
初始状态是sleeping,
从sleeping只可以通过eat事件,转到eating,不可以转到working.(吃了饭才能工作)。
从working只可以通过eat事件,转到eating,不可以转到sleeping. (不能空肚子睡觉)。
然后从eating可以通过work事件转到working,或者sleep转到sleeping.
这些可以转化成下面的代码
class Person < ActiveRecord::Base
include AASM
aasm_column :current_state # 定义那个字段来储存当前状态
aasm_initial_state :sleeping #定义初始状态
#定义三个不同的状态
aasm_state :sleeping
aasm_state :eating
aasm_state :working
#定义每个event及event发生时引发的状态转换
aasm_event :eat do
transitions :from => [:sleeping,:working], :to => :eating
end
aasm_event :work do
transitions :from => :eating, :to =>:working
end
aasm_event :sleep do
transitions :from => :eating, :to => :sleeping
end
end
这样基本上就已经建好了state machine了。可以在console里面实验一下:
ruby-1.8.7-p249 > p=Person.create
=> #<Person id: 10, name: nil, current_state: "sleeping", created_at: "2010-05-09 06:32:41", updated_at: "2010-05-09 06:32:41">
ruby-1.8.7-p249 > p.aasm_events_for_current_state
=> [:eat]
ruby-1.8.7-p249 > p.eat
=> true
ruby-1.8.7-p249 > p
=> #<Person id: 10, name: nil, current_state: "eating", created_at: "2010-05-09 06:32:41", updated_at: "2010-05-09 06:32:41">
ruby-1.8.7-p249 > p.aasm_events_for_current_state
=> [:sleep, :work]
ruby-1.8.7-p249 > p.work
=> true
ruby-1.8.7-p249 > p
=> #<Person id: 10, name: nil, current_state: "working", created_at: "2010-05-09 06:32:41", updated_at: "2010-05-09 06:32:41">
ruby-1.8.7-p249 > p.aasm_current_state
=> :working
可以看到,可以直接用 p.event的形式,来触发事件。
aasm_current_state来获得当前状态,aasm_events_for_current_state 来获得当前状态可用的event.
结合到view的时候也很简单。把aasm_events_for_current_state获得的集合交给用户选择。
返回到server之后的param经过验证之后。可以用p.send(param[:event])的形式触发。
这里的例子是一个工作流的例子。多步骤向导也很类似,这里不再赘述。
除此之外,AASM还提供了很多有用的callback, 感兴趣的朋友可以深入研究一下。
github列出了下面几个:
oldstate:exit*
event:before
__find transition, if possible__
transition:on_transition*
oldstate:before_exit
newstate:before_enter
newstate:enter*
__update state__
event:success*
oldstate:after_exit
newstate:after_enter
event:after
obj:aasm_event_fired*
分享到:
相关推荐
Rails 向导是 Ruby on Rails 开发者的重要资源,它为初学者和经验丰富的开发者提供了深入理解 Rails 框架的全面指南。本压缩包包含了多个关键主题的详细文档,涵盖了从数据库操作到应用调试等多个方面。让我们逐一...
在本案例中,"Ruby-一个Rails引擎提供工作流程的基本基础设施"指的是一个专门为实现工作流程管理而设计的Rails引擎。 工作流程(Workflow)通常涉及到业务流程的自动化,包括任务分配、状态转换和审批流程等。...
Struts2和Rails都是流行的Web开发框架,它们都提供了强大的功能来支持应用程序的国际化,使得开发者可以轻松地为不同语言的用户提供本地化体验。这里我们将深入探讨这两个框架的国际化实现。 **Struts2的国际化实现...
### Rails 101 入门电子书知识点详解 #### 一、简介 《Rails 101 入门电子书》是一本非常适合初学者直接入门的书籍,它由xdite编写并出版于2014年6月10日。本书主要针对的是希望学习Ruby on Rails框架的读者,特别...
随着互联网的快速发展,Ruby on Rails作为一种流行的Web开发框架,在开发领域得到了广泛的应用。它的简易性与高效性让许多开发者为之...随着实践经验的积累,相信你能够更加熟练地运用Ruby on Rails来实现创新的项目。
这些步骤的实现位于`step_definitions`目录下,通常包含Ruby代码,它们将Gherkin步骤与实际的代码逻辑关联起来。通过这种方式,Cucumber-Rails帮助团队确保代码按照预期运行,同时提供了一种非技术人员也能理解的...
**知识点:** Chee Yeo 解释了如何使用 AASM(Active State Machine)来实现在 Ruby on Rails 应用中的复杂工作流逻辑。AASM 提供了一种声明式的方法来定义对象的状态及其转换,使得业务逻辑的管理变得更加直观和...
这一章节将介绍如何在Rails应用中集成Ajax技术,实现更加交互式的用户体验。同时,还将探讨Web 2.0的概念,包括社会化网络、用户生成内容和实时数据流等。 #### 8. Protective Measures(防护措施) 网络安全是...
作者特别提到了“CRUD懶人大法Scaffold”,它是一种通过Rails自动生成代码的方式来快速搭建基本的CRUD操作,这大大简化了开发流程,使得开发者可以将更多的精力放在业务逻辑的实现上。 此外,书中还介绍了一些Rails...
压缩包子文件的文件名称 "Ruby on Rails.pptx" 提示可能是一个关于Rails的PowerPoint演示文稿,其中可能涵盖了Rails的基础概念、安装步骤、主要组件介绍、开发流程、最佳实践,以及可能的示例代码和案例研究。...
ActiveRecord是Rails的ORM系统,它将数据库表与Ruby类绑定,通过ActiveRecord对象操作数据。 2. **视图(View)**:视图负责呈现用户界面,通常由HTML、CSS和JavaScript组成。Rails的 erb(嵌入式Ruby)模板允许...
在这个项目中,`User`和`Image`模型可能会与数据库中的相应表关联,通过定义属性和关系,如`has_many :images`表示一个用户可以拥有多个图片。 5. **路由配置**: Rails的路由系统将URL映射到控制器的行动上,如`/...
标题中的“rails实现验证码实例”指的是使用Ruby on Rails框架创建一个验证码功能的示例。Rails是基于Ruby语言的开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,常用于构建数据库驱动的Web应用。...
总之,配置Ruby on Rails与MySQL环境虽然需要一些步骤,但只要按照指南一步步操作,大部分开发者都能成功完成。记得在配置过程中遇到困难不要灰心,多尝试、多搜索,一定能够找到解决方案。通过这样的实践,你将对...
标题 "rails3.1安装与mysql配置 windows" 涉及到的是在Windows操作系统上安装Ruby on Rails 3.1框架并配置MySQL数据库的过程。这是一个关键的开发环境设置步骤,对于使用Rails进行Web开发的程序员来说至关重要。Ruby...
### Rails 101S: 初学者必备的Ruby on Rails 宝典 #### Introduction: 深入了解Ruby on Rails 《Rails 101S》是一本为Ruby on Rails初学者准备的手册,旨在帮助新手快速入门并掌握基本的开发技能。本手册将从最...
本章将详细介绍Ajax的工作原理及其在Rails中的具体应用。 #### 六、后续发展 ##### 6.1 未来发展方向 第十七章“What next?”展望了RailsSpace项目的发展方向,提出了可能的改进方案和扩展功能,鼓励读者根据自己...
2. **Ruby编写**: 作为纯Ruby实现的服务器,Mongrel与Rails框架集成紧密,减少了中间层带来的额外复杂性。 3. **轻量级**: Mongrel体积小巧,启动快速,适合开发和测试环境。 ** 安装Mongrel ** 在Rails项目中安装...
- **步骤**:通过命令行使用`rails new project_name`来初始化一个新的Rails项目。 - **结构**:新项目将包含默认的目录结构,如`app`、`config`、`db`等,分别用于存放应用程序代码、配置文件、数据库迁移脚本等。 ...