新手问题我担心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节目页面“推进”一个想法。你会如何配置按钮?
答案 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)设置为您所做的任何事件。我想开火。