2

私が持っているとしましょう:多くの「回答」を持つ多くの「質問」を持つ「調査」

「質問」のインスタンスが 2 つある「調査」があった場合、それらを「良い質問」と「悪い質問」と呼びましょう。

「良い質問」には 5 つの「答え」があり、「悪い質問」には 3 つの「答え」があります。

「良い質問」と「悪い質問」が、この jQuery-UI インタラクションで並べ替え可能なリストに接続されていた場合。http://jqueryui.com/sortable/#connect-lists

jQuery-UI を使用してそれらを 2 つの並べ替え可能なリストとして表示する方法を知っています。また、「回答」を「悪い質問」から「良い質問」にドロップすることもできます。しかし、新しいソートされた位置と、新しくソートされた別の「質問」への関連付けをRailsデータベースに保存するにはどうすればよいですか?

Railscasts には、単一のソート可能なリストの位置を保存する方法がありますが、関連付けられた異なるモデルに属するリストの位置は保存できません。 http://railscasts.com/episodes/147-sortable-lists-revised

ここで助けてくれて本当にありがとう!

編集

「回答」をドロップしたリストの要素IDであるRailsコントローラーにPOSTするだけでよいことに気付きました(つまり<ol class = "connectableSortable" id = "Good_Question"</ol>

これは、Railscast が Rails Controller に POST を実行して、object_id の配列をソート可能な順序で渡す方法の構文です。

jQuery ->
  $('#faqs').sortable(
    axis: 'y'
    update: ->
      $.post($(this).data('update-url'), $(this).sortable('serialize'))
  )

この POST を更新してリスト ID を渡すにはどうすればよいので、「回答」の「質問」外部キーを、該当するリスト「ID」に更新できますか?

この SO 回答には、リスト ID を取得する方法があります。要素がドロップされたアイテム/オブジェクトを取得します

だから今、私は本当に追加のパラメータをRailsコントローラに戻す方法を知る必要があります. 何か助けはありますか?

4

1 に答える 1

3

これを数日間苦労した後、私は自分が何を望んでいるのかを理解することができました。ここでのモデルは、多くのアクティビティがある日です(質問の元の質問には多くの回答があります)。

これは私のjQueryコード(Coffeescript内)です。jQueryセレクターを使用して各リストアイテムのIDと各リストアイテムの列IDを取得します。このようなパラメータとしてプッシュするActivity:[{"id":"1", "column":"1"}, {"id":"2", "column":"1"}...etc]

jQuery ->
  $('[id*="day"]').sortable(
    connectWith: ".day"
    placeholder: "ui-state-highlight"
    update: (event, ui) ->
      neworder = new Array()
      $(this).children().each ->
        column = $(this).parent().attr("id").match(/\d+/)[0]
        id = $(this).attr("id").match(/\d+/)[0]
        neworder.push(
          id: id
          column: column
        )
      alert neworder
      $.ajax
        url: "sort"
        type: "POST"
        data: { Activity: JSON.stringify(neworder) }
    ).disableSelection()

RailsコントローラーへのAJAX呼び出しを解析する方法:{"id":"1", "column":"1"}配列内の各オブジェクトをループし、そのインデックス位置も取得しています。

def sort
    JSON.parse(params[:Activity]).each_with_index do |x, index|
      idx = x["id"]
      positionx = index+1
      column = x["column"]
      activity = Activity.find(idx)
      activity.update_attributes(:position => positionx, :day_id => column)
    end
    render nothing: true
  end

モデルに戻って、「アクティビティ」の関連付けをその位置で並べ替えているので、ビューにリストすると、正しい位置に表示されます。

class Day < ActiveRecord::Base
  has_many :activities, :order => 'position'
  accepts_nested_attributes_for :activities, allow_destroy: true 
end

これらの2つの回答で私がこれに到達した方法の詳細:

RailsコントローラーへのAjaxPOSTリクエストのパラメーターのフォーマット-jQueryの場合-UIソート可能リスト

RailsコントローラーへのjQueryAJAXPOST。each_with_indexの実行中にエラーが発生しました(TypeErrorはシンボルを整数に変換できません)

于 2012-11-05T16:52:51.567 に答える