有人可以为pluginaweek - statemachine提供一个有效的记录示例吗?

问题描述:

有人可以举一个简单的例子来说明如何将pluginaweek state_machine用于具有活动记录的票证模型吗? 我不明白这些文档中的复杂示例。有人可以为pluginaweek - statemachine提供一个有效的记录示例吗?

举例说:

  • 新 - >接受,拒绝,反馈
  • 接受 - >解决或反馈
  • 反馈 - >接受或解决

例车票模型(不测试)

class Ticket < ActiveRecord::Base 
    attr_accessible :name, :description 
    attr_accessible :state_event 
    validates :name, :presence => true 

    state_machine :initial => :new do 

    event :accept do 
     transition [:new, :feedback] => :accepted 
    end 

    event :decline do 
     transition :new => :declined 
    end 

    event :feedback do 
     transition [:new, :accepted] => :feedbacked 
    end 

    event :solve do 
     transition [:accepted, :feedback] => :solved 
    end 
    end 
end 

得到所有可能的转变形式

<%= f.collection_select :state_event, @ticket.state_transitions, :event, :human_to_name, :include_blank => @ticket.human_state_name %> 

获取票的状态:<%= ticket.state %>

获取所有可能的票转换为链接:

<% ticket.state_transitions.each do |transition| %> 
    <%= link_to transition.event, ticket_path(ticket, ticket: {:state_event => transition.event}), :method => :put %> 
<% end %> 

列出所有可能的转变在控制器过滤

<ul> 
    <li class="<%= 'active' if params[:state].blank? %>"><%= link_to 'All', tickets_path %></li> 
    <% Ticket.state_machine.states.each do |state| %> 
    <li class="<%= 'active' if params[:state] == state.name.to_s %>"> 
     <%= link_to state.name, tickets_path(:state => state.name) %> 
    </li> 
    <% end %> 
</ul> 

class TicketsController extends ApplicationController 
    ... 
    def index 
    @tickets = Ticket.where("state = ?", params[:state]) 
    ...