加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 有人可以为pluginaweek – statemachine提供一

发布时间:2020-12-17 03:02:21 所属栏目:百科 来源:网络整理
导读:有人可以给出一个简单的例子,说明如何使用 pluginaweek state_machine作为具有活动记录的票证模型吗? 我不明白文档中复杂的例子. 示例说明: 新 – 接受,拒绝,反馈 已接受 – 解决或反馈 反馈 – 接受或解决 解决方法 示例票证模型(未测试) class Ticket Ac
有人可以给出一个简单的例子,说明如何使用 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 %>

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读