Javascript JS事件触发状态机(rails)中的后端状态更改?

Javascript JS事件触发状态机(rails)中的后端状态更改?,javascript,ruby-on-rails,ruby,ajax,state-machine,Javascript,Ruby On Rails,Ruby,Ajax,State Machine,我正在做一个新的项目:后端有很多“课程”和“步骤”的用户 我希望javascript验证用户的答案——比如说用户输入“6”,这是正确的答案。我想检查的函数应该是这样的 function match_answer(course, answer){ } 如果JS事件被证明是真的,我希望它改变后端机器的状态。机器的状态如下所示: class Step < ActiveRecord::Base ... state_machine initial: :pending do state

我正在做一个新的项目:后端有很多“课程”和“步骤”的用户

我希望javascript验证用户的答案——比如说用户输入“6”,这是正确的答案。我想检查的函数应该是这样的

function match_answer(course, answer){
}
如果JS事件被证明是真的,我希望它改变后端机器的状态。机器的状态如下所示:

class Step < ActiveRecord::Base
...

  state_machine initial: :pending do
    state :pending, value: 0
    state :finished, value: 1

    event :finish do
      transition :pending => :finished
    end

    event :restart do
      transition :finished => :pending
    end
  end
end
类步骤:完成
结束
事件:重新启动do
转换:完成=>:挂起
结束
结束
结束
我之所以希望javascript事件更改状态机的状态,是因为当用户重新登录时,我希望他们在课程中的适当位置

1) 如何使用javascript事件更改状态机的状态?更具体地说,如果match_answer函数被证明为true,那么如何将状态从:pending更改为:finished。

2) 假设数据库中存储了正确的答案(将对照用户的答案进行检查),那么如何从数据库中获取正确的答案,以便在match_answer javascript函数中实现它以对照用户的答案进行检查

如果您能为我提供任何帮助或资源,我将不胜感激

1)在match_answer javascript函数中,使用AJAX发布到服务器应用程序,以更新它们所执行的步骤

2) 在javascript中,您需要知道正确的答案,或者可能需要知道一系列问题和正确答案。获取此信息的一种方法是使用gon gem,它基本上允许您在控制器中设置数据,就像@instance变量一样,只是它在javascript中可用。一个缺点是,如果用户在页面上查看了一个视图源并进行了足够仔细的查看,那么答案将是可见的。另一种方法是通过ajaxget请求将它们从服务器中分别提取出来,但是如果这看起来有可能的话,用户也可以窥探流量并找到它们

也许更好的方法是使用AJAX将用户的答案发布到服务器上,因为每个答案都要点击服务器。如果正确,服务器可以更新用户正在执行的步骤并返回200状态代码。如果回答错误,服务器可以返回422状态代码。您的ajax可以使用ajax请求中的成功回调或错误回调来做出适当的响应