1

Rails モデルを更新しようとしていますが、ajax リクエストが通過しても、データ処理でいくつかのエラーに直面しています。

送信されるパラメータは次のように表示されます。

Parameters: {"{\"slot_allocation\":{\"timeslot_id\":\"3\",\"subject_id\":\"3\",\"slot_allocation_id\":\"1\",\"group_index\
":\"Group 2\",\"lesson_type\":\"Tutorial\"}}"=>nil, "id"=>"1"}
  SlotAllocation Load (0.2ms)  SELECT "slot_allocations".* FROM "slot_allocations" WHERE "slot_allocations"."id" = ? LIMIT 1
  [["id", "1"]]

一方、通常の更新では次のことが行われます。

  Parameters: {"utf8"=>"✓", "authenticity_token"=>"yBib4ftNdB/r25uZuGnqEZI+r9dulVhyoce8nWBfcBQ=", "slot_allocation"=>{"slot_
allocation_id"=>"1", "lesson_type"=>"Lecture", "group_index"=>"Group 1", "timeslot_id"=>"1", "subject_id"=>"1"}, "commit"=>"
Update Slot allocation", "id"=>"1"}
  SlotAllocation Load (0.3ms)  SELECT "slot_allocations".* FROM "slot_allocations" WHERE "slot_allocations"."id" = ? LIMIT 1
  [["id", "1"]]

Rails と JSON に不慣れなため、どこで間違ったのかわかりません。

How do I parse JSON with Ruby on Rails? に投稿されたソリューションを試しました。. しかし、コードを変更した後、リクエストは送信されません。特定の例に従って、送信されるデータを変更しようとしましたが、うまくいきませんでした。

このエラーを解決するために何ができるかについてアドバイスをいただければ幸いです。

関連するコードは次のとおりです。

私のAjaxリクエスト:

var url = 'slot_allocations/'+alloc_id;

var dataToServer = {"slot_allocation":{"timeslot_id":timeslot, "subject_id":subject,"slot_allocation_id":alloc_id, "group_index":"Group 2", "lesson_type":"Tutorial"}}

  $.ajax({
    type: "PUT",
    url: url, 
    dataType: "json",
    data: JSON.stringify(dataToServer) 
    });

私のコントローラー更新アクション:

  def update
    @slot_allocation = SlotAllocation.find(params[:id])

    respond_to do |format|
     if @slot_allocation.update_attributes(params[:slot_allocation])
        format.html { redirect_to @slot_allocation, notice: 'Slot allocation was successfully updated.' }
        format.json { head :ok}
      else
        format.html { render action: "edit" }
        format.json { render json: @slot_allocation.errors, status: :unprocessable_entity }
        format.js  { render :js => @slot_allocation.errors, :status => :unprocessable_entity }
      end
    end
  end

どこが間違っていたのか、アドバイスをいただければ幸いです。ありがとう!

4

1 に答える 1

2

update_attributesハッシュを期待します。サーバーに送信するデータを JSON に変換することで、代わりに params に JSON 文字列が含まれます。標準の POST データでコントローラーを呼び出す必要があります。

$.ajax({
  type: "PUT",
  url: url, 
  dataType: "json",
  data: dataToServer
});
于 2013-01-01T14:41:01.163 に答える