Как передать переменную javascript и сохранить ее в базе данных Rails - PullRequest
0 голосов
/ 25 января 2019

Я новичок в 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

в 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'

Пожалуйста, скажите мне, если я делаю что-то не так. Я до сих пор не знаю, правильный ли мой маршрут и каким должен быть URL ajax. Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 26 января 2019

Ваш сценарий ajax должен быть

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

Rails action

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

private 
    def score_params
        params.permit(:quiz, :score)
    end
0 голосов
/ 26 января 2019

Чтобы отправить данные поста, вы должны установить объект данных для $. Ajax

$.ajax({
    url: "/result/mark",
    data: {"quiz": quiz, "mark": mark},
    type: "POST",
    success: function (data) {
        console.log(data);
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...