Получение параметров, но не обновление атрибутов модели - PullRequest
0 голосов
/ 22 августа 2011

У меня здесь странная проблема - я либо неправильно отправляю атрибуты, либо делаю что-то не так в конце Rails.Похоже, что на стороне javascript / jQuery можно сделать больше, чем на стороне Rails, так что это более вероятно.

В любом случае, вот соответствующие фрагменты кода.Мой вопрос в самом низу этого поста.

Метод контроллера

  def update
    @answer = Answer.find(params[:id])
    @answer.update_attributes(params[:answer])
    puts @answer.inspect
    respond_to do |format|
      format.html { render :json => Answer.find(params[:id]) }
    end
  end

Функция Javascript (загружен jQuery)

function saveAnswer(question_number, answer_number)
{
    console.log(JSON.stringify(window.questions[question_number].answers[answer_number]));
    $.ajax(
    {
        type: 'POST',
        url: "/answers/" + window.questions[question_number].answers[answer_number].id + "/update",
        data: JSON.stringify(window.questions[question_number].answers[answer_number]),
    });
}

Выводвыше console.log() вызываемая функция:

{"content":"Latte.ASDASD!!!!       Z","created_at":"2011-08-15T20:01:48Z","graded":true,"id":9,"problem_id":2,"turned_in":true,"updated_at":"2011-08-22T06:42:20Z","user_id":1,"score":5}

WEBrick, получающий запрос:

Started POST "/answers/9/update" for 127.0.0.1 at 2011-08-21 23:44:10 -0700
  Processing by AnswerController#update as */*
  Parameters: {"content"=>"Latte.ASDASD!!!!       Z", "created_at"=>"2011-08-15T20:01:48Z", "graded"=>"true", "id"=>"9", "problem_id"=>"2", "turned_in"=>"true", "updated_at"=>"2011-08-22T06:42
:20Z", "user_id"=>"1", "score"=>"5"}
  ←[1m←[36mAnswer Load (0.0ms)←[0m  ←[1mSELECT "answers".* FROM "answers" WHERE "answers"."id" = ? LIMIT 1←[0m  [["id", "9"]]
  ←[1m←[35mCACHE (0.0ms)←[0m  SELECT "answers".* FROM "answers" WHERE "answers"."id" = ? LIMIT 1
Completed 200 OK in 16ms (Views: 4.9ms | ActiveRecord: 0.0ms)

Содержание модели:

irb(main):007:0> Answer.inspect
    => "Answer(id: integer, problem_id: integer, user_id: integer, content: text, created_at: datetime, updated_at: datetime, turned_in: boolean, graded: boolean)"

Как мне получить Rails дляобновить атрибуты указанной модели Answer, используя входные данные из функции saveAnswer?

1 Ответ

1 голос
/ 22 августа 2011

Вам не хватает корневого элемента в поле данных вашего запроса JSON.Должно быть как:

function saveAnswer(question_number, answer_number) {
  console.log(window.questions[question_number].answers[answer_number]);

  $.ajax({
    type: 'POST',
    url: "/answers/" + window.questions[question_number].answers[answer_number].id + "/update",
    data: { answer: window.questions[question_number].answers[answer_number] }
  });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...