1

html のデータに基づいて Workorder.wostatus_id を変更したいと思います。

私のインデックス html では、wostatus.id を次のように保存しています。

<span id="woid">4</span>

workorder.wostatus_id = 4 を更新したい

これは workorders.js.coffee にありますが、機能していません:

   $.ajax
     type: 'POST'
     url: 'http://localhost:5000/workorders'
     data:
       workorder:
         wostatus_id: $("#woid").val()

たぶん、正しい作業指示レコードに到達していないのでしょうか?

これを行ってもworkorder.wostatus_idは更新されませんでした

     $.ajax
       type: 'POST'
         url: "http://localhost:5000/workorders"
       data:
         workorder:
           wostatus_id: '3'

これもうまくいきませんでした:

     $.ajax
      type: 'POST'
      url: "http://localhost:5000/workorder/17"
      data:
        wostatus_id: '7'

私は何か大きな時間を逃しています。

ajax POST は、workorder コントローラーでこのコードを実行しますか????

 # PUT /workorders/1
 # PUT /workorders/1.json
 def update
  @workorder = Workorder.find(params[:id])

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

アップデート:

これをworkorderコントローラーに追加しました:

 def changestatus
  @workorder = Workorder.find(params[:id])
  @workorder.update_attribute :wostatus_id, '4'
  render nothing: true
 end

これをルートに追加しました:

  resources :workorders do
   member { put :changestatus }
  end

これは現在 js.coffee にあります。

  $.ajax
    type: 'PUT'
    url: "http://localhost:5000/workorders/11/changestatus"
    data:
      wostatus_id: 4

(次のステップが機能するまで、私は物事をハードコーディングしています。)

SO - これは機能し、workorder 11 は wostatus_id を 4 に変更します。

しかし、今、html から正しい情報を取得するのに問題があります。HTML には必要な 2 つのデータ フィールドが含まれています。1 つは作業順序用で、もう 1 つは wostatus_id です。

更新 URL の html は次のとおりです。

<div class="false" data-change-url="http://localhost:5000/workorders/16/changestatus">

これでそのURLが取得されると思いましたが、機能しません:

$(this).data('change-url')
4

2 に答える 2

1

私が正しく理解していれば、コントローラーが配列を期待している間に単一の値を送信し、異なるパラメーター名を使用していると思います(wostatus_idクライアントworkorder上、サーバー上)。

おそらくあなたが望むのはこれです:

$.ajax
  type: 'POST'
  url: $('#sort2').data('update-url')
  data:
    workorder: $('#sort2 span').map((i, el) ->
      el.text()
    ) // Change the selector to the elements that holds the ID
于 2013-01-08T03:24:31.087 に答える
0

新しいコントローラーコードは必要ないことがわかりました。更新を使用するだけで済みます。これはjquery-uiの並べ替え用です。

   receive: (event, ui) ->
     str_id =  $(ui.item).attr('id')
     woid = str_id.split('_')[1]
     $.update "/workorders/" + woid,
       workorder:
         wostatus_id: $(this).data('wostatus-id')

助けてくれてありがとう-あなたは私を正しい方向に向かわせた。

于 2013-01-09T16:37:24.250 に答える