Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.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 使用状态机更改费用的状态_Ruby On Rails - Fatal编程技术网

Ruby on rails 使用状态机更改费用的状态

Ruby on rails 使用状态机更改费用的状态,ruby-on-rails,Ruby On Rails,我正在尝试使用Rails 4.1构建一个小型费用跟踪应用程序。当用户提交费用申请时,其状态默认标记为挂起。管理员必须批准该请求。我用状态机gem来做这个 目前,费用模型如下所示 state_machine initial: :pending do state :pending state :approved event :approved do transition :pending => :approved end end 当有人创建新的费用报告时,它会自动标

我正在尝试使用Rails 4.1构建一个小型费用跟踪应用程序。当用户提交费用申请时,其状态默认标记为挂起。管理员必须批准该请求。我用状态机gem来做这个

目前,费用模型如下所示

state_machine initial: :pending do
  state :pending
  state :approved

  event :approved do
    transition :pending => :approved
  end
end
当有人创建新的费用报告时,它会自动标记为“已成功挂起”。我想的工作流程是,管理员将访问费用/显示页面,并使用下拉菜单批准费用。然而,我不太确定是否能通过Rails的方式完成这项工作

我尝试使用:

<%= form_for @expense do |f| %>
  <%= f.label :state_event %><br />
  <%= f.collection_select :state_event, @expense.state_transitions, :event, :human_to_name, :include_blank => @expense.human_state_name %>
  <%= f.submit %>
<% end %>

有人能建议如何完成这项任务吗?

问题是
保存(费用参数)
不会用参数更新记录。相反,请使用
更新

@expense.update(expense_params)

请发布更新操作的代码。如果不麻烦的话,我还有一个快速问题。更新状态后,下拉列表仅显示当前状态,而不显示所有其他状态。例如,如果我拒绝某项费用,则“批准”和“暂停”将不再显示在菜单中。如何使它们显示?
状态\转换
仅包括为当前状态定义的转换。
@expense.update(expense_params)