有人可以为pluginaweek – statemachine提供一个活跃的记录示例吗?

有人可以举例说明如何使用pluginaweek state_machine作为具有活动记录的票证模型吗? 我不明白文档中复杂的例子。

示例说明:

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

示例票证模型(未测试)

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 %> 

列出要在控制器中过滤的所有可能转换

 
  • <%= link_to 'All', tickets_path %>
  • <% Ticket.state_machine.states.each do |state| %>
  • <%= link_to state.name, tickets_path(:state => state.name) %>
  • <% end %>
class TicketsController extends ApplicationController ... def index @tickets = Ticket.where("state = ?", params[:state]) ...