0

我有一个名为“checked”的公式,它检查用户答案是真还是假(这需要在 javascript 中)。如果它是真的,在rails中我需要在用户和步骤之间创建一个新的关系,它具有“状态”的属性。创建后,我需要将该状态从“待处理”更改为“已完成”。用户单击下一步按钮后,我需要进行下一步。鉴于我认为我不能将 ruby​​ 放入我的 javascript 中,我很困惑如何做到这一点。

问题.html.erb

<script>
   var checked = // this is a function that returns true or false based on whether user answer is correct - assume this works
       if(checked)
        {

            //display correct-answer dialogue
            $('#modal-simple-success').modal('show')  <<< this works fine

            //create a relationship between User and Step (UserStep Model) 
            <%= current_user.user_steps.build(step_id: @step.id)} %> << need help here considering cant have ruby in javascript

            //after building the relationship between the two models, change state from pending to finished
            <%= @user_steps.state.finish! %> <<need help here


            //move to next step
            $('#next-button').on('click', move to next step??? <<need help here 

        }
        else
        {
            //display wrong-answer dialogue
            $('#modal-simple-failure').modal('show')


        }
</script>

这是我的步骤控制器:

class StepsController < ApplicationController   

    def show
        @course = Course.find(params[:course_id])
        @level = Level.find(params[:level_id])
        @step = Step.find(params[:id])
        @user_step = current_user.user_steps.find(params[:id])
    end

end

我想从这里改变我的提交按钮:

<div class="checkAnswer" data-toggle="modal">
  <%= link_to_function "check answer", 'execute();', class: "btn btn-success"%>
</div>

对此:

   <div class="checkAnswer" data-toggle="modal">
    <%= form_for(current_user.user_steps.build(step_id: @step.id), remote: true) do |f| %>
     <div><%= f.hidden_field :step_id %></div>
     <%= f.submit "check answer", class: "btn btn-success"%>
    <% end %>
   </div>

但仍需要启动 execute(); 功能,但仍然不确定如何更改状态。

任何有关正确方法的帮助将不胜感激。

4

1 回答 1

0

如果我理解正确,我会将所有这些 ruby​​ 代码放入 AJAX 调用中。我建议您将它放在 Step 控制器中,因为您可以访问current_user任何控制器。尝试:

<%= link_to 'check answer',
  step_next_path(@step),
  remote: true,
  method: post %>

并设置路线,说:

resources :steps do
  post 'next', to: 'steps#next'
end
于 2013-09-28T01:25:02.027 回答