RESTful State Machine переход с Rails и государственный деятель Gem
Это продолжение, основанное на великолепных ответах в ресурсе RESTful для конечного автомата, и этот вопрос, вероятно, больше связан с остальным, чем конечный автомат
Я использую Gem Statesman в приложении Rails 4.2. У меня есть модель Service и связанная модель state_transitions, которая хранит переходы через Active Record.
Транзитный метод показан в Документах Государственного деятеля как таковой: Order.first.state_machine.transition_to!(:cancelled)
Я знаю, что это даже не близко
В моем случае у меня есть button_to 'ok', service_path, action: "#{service}.transition_to!(:received)"
В моей сервисной модели transition_to делегирован на конечный автомат
Как я могу отправить запрос на изменение состояния через форму button_to?
1 ответ
Я думаю, что вы путаете действия контроллера с действиями на моделях. На самом деле это должны быть две разные вещи - у вас должно быть действие контроллера, которое вы можете вызывать из представления, а затем внутри этого действия контроллера вы можете изменить свое состояние. Например:
routes.rb
resources :orders do
member do
put "receive" => "orders#receive", as: :receive
end
end
OrdersController
...
def receive
order = Order.find(params[:id])
if order.state_machine.transition_to!(:received)
flash[:notice] = "Success"
redirect_to action: :show, id: order.id
else
flash[:error] = "Could not transition to 'received'"
render action: :show, id: order.id
end
end
...
view.rb
...
= button_to "Mark as received", receive_order_path(order), method: :put
Обратите внимание, что я пишу псевдокод с макушки головы, но он должен быть более или менее действительным. Пожалуйста, извините за любые незначительные синтаксические ошибки.