私は最近、2つの素晴らしいgem、state_machineとcancanをrailsアプリケーションで使用していますが、それらをきれいに統合するための最良の方法に興味があります。現在、コントローラーによって承認されたアクションを実行するボタンに状態遷移を配置しました。これは完全に機能します。そのアクションを実行できるユーザーを制限できます。
編集フォームでもオブジェクトの状態を変更できるようにしたいと思います。state_machineがハッシュ内のstate_eventキーを取得し、実行するアクションの値を取得することに気付きました(したがって、state_machinesのすべてのコールバックを通過します)。これは、update_attributesのparamsハッシュを使用して渡すことができます。素晴らしい。
ただし、特定のユーザーのみがオブジェクトを特定の状態に変更できる必要があります。これをどのように実装しますか?アイデアは
params['state_event']=='move_to_x'
一部のユーザーには保釈する必要がありますが、他のユーザーには許可する必要があります。また、これを実装するまでは、許可されるべきではない場合でも、賢いユーザーが状態イベント内で何かを投稿できる承認部分であるため、私も懸念しています。