有人可以为pluginaweek

编程入门 行业动态 更新时间:2024-10-28 09:13:07
有人可以为pluginaweek - statemachine提供一个活跃的记录示例吗?(Can somebody give an active record example for pluginaweek - statemachine?)

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

示例说明:

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

Can somebody give a simple example on howto use pluginaweek state_machine for a ticket model with active record? I do not understand the complex examples from the docs.

Example states:

new -> accepted, declined, feedback accepted -> solved or feedback feedback -> accepted or solved

最满意答案

示例票证模型(未测试)

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

Example ticket model (not tested)

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

Get all possible transitions in form

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

Get state of ticket: <%= ticket.state %>

Get all possible ticket transitions as links:

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

List all possible transitions to filter in controller

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

更多推荐

本文发布于:2023-07-30 07:08:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1336682.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:pluginaweek

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!