【问题标题】:Can somebody give an active record example for pluginaweek - statemachine?有人可以为 pluginaweek - statemachine 提供一个活动记录示例吗?
【发布时间】:2012-03-04 23:05:07
【问题描述】:

有人可以举一个简单的例子来说明如何将pluginaweek state_machine 用于具有活动记录的票证模型吗? 我不理解文档中的复杂示例。

示例状态:

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

【问题讨论】:

    标签: ruby-on-rails activerecord state-machine


    【解决方案1】:

    票证模型示例(未测试)

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

    获取工单状态:&lt;%= ticket.state %&gt;

    以链接形式获取所有可能的工单转换:

    <% 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])
        ...       
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-25
      • 1970-01-01
      • 2011-04-03
      • 1970-01-01
      • 2021-11-10
      • 2010-10-01
      • 2021-10-31
      • 2017-09-29
      相关资源
      最近更新 更多