rails state_machine按钮转换

时间:2014-09-30 10:31:41

标签: ruby-on-rails ruby

新手问题我担心state_machine gem。

我已按如下方式设置了一个课程

class Idea < ActiveRecord::Base

  #state machine
  state_machine :state, :initial => :voting_underway do

    event :progress do
        transition :voting_underway => :accepted, :accepted => :in_development, :in_development => :done
    end

    event :reject do
        transition all => :rejected
    end

    def initialize
      super() # NOTE: This *must* be called, otherwise states won't get initialized
    end
  end
end

这是一个愚蠢的问题。我如何从例如该想法的HAML节目页面“推进”一个想法。你会如何配置按钮?

1 个答案:

答案 0 :(得分:0)

首先是一些通用指针:

initialize块中使用state_machine方法没有多大意义。你根本不需要它,除非你想做一些自定义的东西,你通常不会这样做。

也就是说,有很多方法可以做你想要的,但我会去做自定义控制器动作。

在路线和IdeasController中创建自定义操作:

# routes.rb

resources :ideas do
  put "progress"
end

# ideas_controller.rb

def progress
  @idea = Idea.find(params[:id])
  @idea.progress!
end

# in a view

= link_to "Transition", idea_progress_path, method: :put

您还可以向现有put操作发出update请求,并将state_event参数(假设您的状态机属性命名为state)设置为您所做的任何事件。我想开火。