访问非当前的state_machine状态

时间:2013-02-26 02:52:28

标签: ruby-on-rails-3 state-machine

我的order.rb文件中有六个状态。我想访问每个非当前状态以填充下拉菜单,以便可以轻松更改状态。我想出了这个。显然,该功能不起作用,状态为written_like_this

<% order.state_paths.to_states.each do |state| %>
    <%= link_to(state.to_s, order.adjust(state)) %>
<% end %>

我也想编写一个catch-all方法来解释上面菜单中的点击并将记录转换为选定状态。像(伪代码):

def adjust(state)
  @order = Order.find(params[:id])
  @order.state = state
end

任何想法都会很棒。干杯!

1 个答案:

答案 0 :(得分:0)

我已经明白了。

def adjust
  session[:return_to] ||= request.referer
  @doc = Doc.find(params[:id])
  state = params[:state]
  respond_to do |format|
    @doc.update_attribute(:state, state)
    @doc.create_activity state.to_sym, owner: current_user
    format.html { redirect_to root_url, notice: "#{@doc.title} has now been #{state}." }
    format.json { render json: @doc }
  end
end

我按下这样的按钮:

<% activity.trackable.state_paths.events.each do |s| %>
  <%= link_to(s.to_s.titlecase, adjust_path(s, activity.trackable)) %>
<% end %>

动臂。