0

我正在开发一个新项目:后端有用户,其中有_many“课程”,也有_many“步骤”。

我希望 javascript 验证用户的答案 - 即假设用户输入“6”,这是正确的答案。我想检查的功能看起来像这样。

function match_answer(course, answer){
}

如果 JS 事件被证明是真的,我希望它改变后端的 state_machine。state_machine 如下:

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

我想要一个 javascript 事件来更改状态机状态的原因是因为当用户重新登录时,我希望他们去课程中的适当位置。

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

2)假设正确的答案(将检查用户的答案)存储在数据库中,我该如何从数据库中获取正确的答案以便在 match_answer javascript函数中实现它以检查用户的答案?

您可以指出我的任何帮助或资源将不胜感激。

4

1 回答 1

0

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

2) 在您的 javascript 中,您需要知道正确答案,或者可能是问题列表和正确答案。获取此信息的一种方法是使用 gon gem,它基本上可以让您在控制器中设置数据,就像 @instance 变量一样,只是它在您的 javascript 中可用。一个缺点是,如果用户曾经在页面上查看源代码并且看起来足够努力,那么答案将是可见的。另一种方法是通过 AJAX 获取请求从服务器中单独获取它们,但如果这看起来很可能的话,用户可能再次能够窥探流量并找到它们。

也许更好的方法是使用 AJAX 将用户的答案发布到服务器,因为无论如何您都会为每个答案访问服务器。如果正确,服务器可以更新用户所在的步骤并返回 200 状态码。如果回答错误,服务器会返回 422 状态码。您的 ajax 可以使用来自 ajax 请求的成功回调或错误回调来适当地响应。

于 2013-04-24T15:53:48.917 回答