如何传递javascript变量并将其保存在Rails数据库中

时间:2019-01-25 16:18:05

标签: javascript ruby-on-rails ajax model

我是Rails的新手,我正在尝试将JavaScript变量从视图保存到Rails Controller,然后将其保存到Model(数据库)。用户回答测验/调查,然后进入结果页面。结果页面包含用于计算标记/结果的javascript,我希望将标记保存到数据库中。

我环顾四周,发现最好的解决方案是从前端使用AJAX并在控制器(后端)中检索数据。

我有一个名为quiz的控制器,其中包含我所有的方法,还有一个存储结果的模型称为Score。执行/访问结果页面后,应保存用户的结果。

这是我所做的:

在quiz_controller.rb

def result
    @title = "Quiz Results"
end

def score
    @mark = Score.all
end

def mark
    quiz_name = params[:quiz]
    mark = params[:mark]
    @mark = Score.new(score_params)
    @mark.save
end

private 
    def score_params
        params.require(:score).permit(:quiz, :score)
    end

in result.html.erb

<script>

var mark = calcMark();

$.ajax({
  url: "http://localhost:3000/mark?quiz=" + quiz + "&mark=" + mark,
  type: "POST",
  success: function (data) {
    console.log(data);
  }
});
</script>

2019年****** _ create_scores.rb

t.string "quiz", :limit => 50, :null => false
t.column "score", :decimal, :limit => 30, :null => false
t.datetime "created_at"
t.datetime "updated_at"

在我的路线上。rb

get 'result' => 'quizs#result'
post 'result/mark' => 'quizs#mark'

请告诉我我做错了什么。我仍然不知道我的路线是否正确以及ajax的网址应该是什么。预先感谢。

2 个答案:

答案 0 :(得分:1)

您的ajax脚本应该是

$.ajax({
    url: "/result/mark",
    data: {"quiz": quiz, "score": mark},
    type: "POST",
    success: function (data) {
        console.log(data);
    }
});

采取行动

def mark
    @mark = Score.create!(score_params)
end

private 
    def score_params
        params.permit(:quiz, :score)
    end

答案 1 :(得分:0)

要发送帖子数据,您必须为$.ajax设置数据对象

$.ajax({
    url: "/result/mark",
    data: {"quiz": quiz, "mark": mark},
    type: "POST",
    success: function (data) {
        console.log(data);
    }
});