我是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的网址应该是什么。预先感谢。
答案 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);
}
});