Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rails状态机按钮转换_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails rails状态机按钮转换

Ruby on rails rails状态机按钮转换,ruby-on-rails,ruby,Ruby On Rails,Ruby,新手问题恐怕是关于国家机器宝石的 我已经建立了一个班级如下 class Idea < ActiveRecord::Base #state machine state_machine :state, :initial => :voting_underway do event :progress do transition :voting_underway => :accepted, :accepted => :in_development

新手问题恐怕是关于国家机器宝石的

我已经建立了一个班级如下

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
classidea:投票
事件:进展如何
转换:正在进行投票=>:已接受,:已接受=>:正在开发,:正在开发=>:已完成
结束
事件:拒绝do
全部转换=>:已拒绝
结束
def初始化
super()#注意:必须调用此*函数,否则无法初始化状态
结束
结束
结束

这个愚蠢的问题来了。我如何“推进”一个想法,例如,HAML展示页面上的想法。如何配置按钮?

首先是一些常规指针:

状态机
块中使用
初始化
方法没有多大意义。你根本不需要它,除非你想在它里面做一些定制的事情,而你通常不需要

也就是说,有很多方法可以满足您的需要,但我会选择自定义控制器操作

在管线和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
您还可以将
请求放入现有的
更新
操作,并将
state\u event
参数(假设您的状态机属性名为state)设置为要触发的任何事件