我正在使用AASM.是否有可能从任何州过渡?例如:
aasm_event :publish do
transitions :to => :publish, :from => ANY_STATE
end
Run Code Online (Sandbox Code Playgroud)
我知道可以传递一系列状态:from
,但这不是我所追求的.我试过:from
完全省略了,但是没有用.
我需要一个状态机用于消息专用系统和订单状态系统.
你可以看到这两个宝石:
https://github.com/pluginaweek/state_machine
https://github.com/rubyist/aasm
我正在使用mongoid和mongodb数据库
什么宝石最适合这个功能?
ruby-on-rails state-machine aasm ruby-on-rails-3 ruby-on-rails-3.1
使用aasm在转换时将对象的状态持久保存到数据库的最佳方法是什么?我原以为这会自动发生,但事实并非如此.
(编辑:当我手动保存对象时,状态列确实会更新.但是在转换时没有保存.)
我找不到这个插件的很多有用的文档,所以如果你有一个有更好的文档的替代有限状态机实现的建议,这可能也有帮助.
我正在使用Rubyist的AASM为AR对象构建一个4步向导.根据对象的状态,需要进行不同的验证.根据某个过渡的状态验证对象的最智能方法是什么?
我想知道你们如何在控制器中使用工作流程或AASM gem,如果你想更新所有属性,还需要工作流程/ AASM回调才能正常启动.
目前,我使用它像这样:
class ModelController < ApplicationController
def update
@model = model.find(params[:id])
if params[:application]['state'].present?
if params[:application]['state'] == "published"
@model.publish!
end
end
if @model.update_attributes(params[:application]); ... end
end
end
Run Code Online (Sandbox Code Playgroud)
感觉不对,什么是更好的解决方案?
我正在使用Rails 3.2.2,使用aasm gem,我有这样的Document
模型:
class Document < ActiveRecord::Base
include AASM
aasm do
state :unread, :initial => true
state :read
state :closed
event :view do
transitions :to => :read, :from => [:unread]
end
event :close do
transitions :to => :closed, :from => [:read, :unread]
end
end
Run Code Online (Sandbox Code Playgroud)
现在在我的控制台上:
? ? bundle exec rails c
Loading development environment (Rails 3.2.2)
irb(main):006:0> Document.create!(:title => 'test')
(0.2ms) BEGIN
SQL (0.3ms) INSERT INTO `documents` (`aasm_state`, `checklist_id`, `created_at`, `description`, `dir`, `planned_date`, `procedure_id`, `section`, `subsection`, `title`, `updated_at`) …
Run Code Online (Sandbox Code Playgroud) 我有一个代表注册过程的模型,需要跟踪几个过程的进展(背景检查,访谈,信息收集......).每个都可以由状态机表示,然后注册的总体状态可能取决于其他状态.
aasm可以处理这个吗?还有其他想法或设计考虑吗?
在state_machine我以前做过
state :cancelled do
validates_presence_of :user
end
Run Code Online (Sandbox Code Playgroud)
如果用户不在,它会自动取消转换.
我们如何在aasm中为特定状态添加类似的验证?
有没有办法在任何情况下定义has_legs?
在进入状态(例如running
)之前检查的防护(例如)?
在所有可能的回调列表中,有事件和转换的保护,但不是事件.
我试图对模型进行条件验证.它在事件执行中起作用,但不适用于aasm方法(例如may_run?
).
我成功地将最新的AASM gem集成到一个应用程序中,使用它来创建向导.在我的情况下,我有一个模型订单
class Order < ActiveRecord::Base
belongs_to :user
has_one :billing_plan, :dependent => :destroy
named_scope :with_user, ..... <snip>
include AASM
aasm_column :aasm_state
aasm_initial_state :unauthenticated_user
aasm_state :unauthenticated_user, :after_exit => [:set_state_completed]
aasm_state : <snip>
<and following the event definitions>
end
Run Code Online (Sandbox Code Playgroud)
现在我想让管理员通过AASM状态创建自己的图表.因此,我创建了另外两个名为OrderFlow和Transition的模型,其中order_flow有许多转换,订单为belongs_to order_flow.
到目前为止没问题.现在我想让我的管理员可以动态地将现有的转换/事件添加到order_flow图.
现在的问题是,我没有找到任何可能从我的订单模型中获取所有事件/转换的列表.aasm_states_for_select似乎是正确的候选人,但我不能在我的订单模型上调用它.
有人可以帮忙吗?
Thx提前.J.