【问题标题】:I need to create a new relationship between two models(rails) and then change an attribute of the relationship model via javascript我需要在两个模型(rails)之间创建新关系,然后通过 javascript 更改关系模型的属性
【发布时间】:2013-09-27 21:18:21
【问题描述】:

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

question.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();功能,但仍然不确定如何更改状态。

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

【问题讨论】:

  • 很难说 checked 做了什么以及为什么它需要在 JavaScript 中
  • 它来自嵌入在 javascript (microsoft excel sheet) 中的 api。因此,它会根据数据库中的值检查输入此 excel API 的值。我让它正常工作,这意味着它正确地将真或假传递给函数。但是,我需要其他行为的帮助。 Net net:将true或false传递给if / else条件,并且需要在javascript中

标签: javascript jquery ruby-on-rails ruby ajax


【解决方案1】:

如果我理解正确,我会将所有的 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-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-04
    • 2020-01-01
    • 1970-01-01
    • 2016-10-03
    • 2015-12-24
    相关资源
    最近更新 更多