2012-11-02 2 views
2

이의 내가 가진한다고 가정 해 봅시다 레일하기 위해 결사 저장 : 을에 '설문 조사'가 많은 '질문'에를 많은 '답변'jQuery를-UI 정렬 가능한 연결을 나열 모델

나는 '설문 조사'를 한 경우 그의 그들을 호출 할 수 있도록하는 '질문'의 두 인스턴스를했다 '좋은 질문'과 '나쁜 질문'

'좋은 질문'5 '답변'이 있고 '나쁜 질문은'3가 '답변'

'좋은 질문'과 '나쁜 질문'이이 jQuery-UI 상호 작용을 통해 정렬 가능한 목록으로 연결되는 경우 http://jqueryui.com/sortable/#connect-lists

jQuery-UI를 사용하여 2 개의 정렬 가능한 목록으로 표시하는 방법을 알고 있고 '잘못된 질문'에서 '좋은 질문'으로 '답변'을 드롭 할 수도 있습니다. 그러나 어떻게 새로운 정렬 된 위치와 새로 정렬 된 관계를 다른 '질문'으로 저장하여 레일스 데이터베이스에 저장하겠습니까?

Railscasts는 정렬 가능한 단일 목록의 위치를 ​​저장하는 방법을 가지고 있지만 다른 관련 모델에 속한 목록에는 저장하지 않습니다. http://railscasts.com/episodes/147-sortable-lists-revised

정말 도움을 주셔서 감사합니다.

편집

난 그냥 레일 컨트롤러에 POST해야한다는 것을 깨달았다

, 나는 (즉 <ol class = "connectableSortable" id = "Good_Question"</ol>)

이에 '답'을 떨어 목록의 요소 ID는 구문입니다 Railscast가 sortable 순서로 object_id의 배열을 전달하기 위해 레일즈 컨트롤러에 POST를하는 방법.

jQuery -> 
    $('#faqs').sortable(
    axis: 'y' 
    update: -> 
     $.post($(this).data('update-url'), $(this).sortable('serialize')) 
) 
나는 그것에리스트 ID를 전달하는이 게시물을 업데이트, 그래서 난 그냥으로 떨어졌다 목록 'ID'에 '응답'에 대한 '질문'외래 키를 업데이트 할 수있는 방법

?

이 SO 응답에는 목록 ID를 검색하는 방법이 있습니다. Get the item/object where the element is dropped

그래서 이제는 추가 매개 변수를 레일 컨트롤러로 전달하는 방법을 알아야합니다. 어떤 도움이 필요합니까?

+0

당신은 $ 같은 것을 사용하여 목록 ('리의 위치를 ​​얻을 수 있습니다. selected '). index() –

+0

Question 인스턴스가 제공 한 목록이 Answer 인스턴스의 배열이라고 가정합니다. 그런 다음 그것들을 하나의 배열로 만들려면'master_array = arr1 + arr2'을 수행하고 그것을 jQuery에 준다. 새로 정렬 된 위치를 저장하는 것은 완전히 다른 일입니다. 당신은 실제로 질문이 아닌 _Survey_와 관련하여 목록 순서를 저장하려고합니다. 왼쪽의 설문 조사부터 시작하여 오른쪽의 Answers에 대한 질문까지 모든 것을 종이 위에 그립니다. 더 많은 한 설문 조사에서 질문을 사용할 수 있습니까? – iain

+0

현재 '질문'은 '설문 조사'에만 속합니다. 또한 '답변'은 1 개의 '질문'에만 속합니다. 이 경우 '답변'과 '질문'간의 연관성을 변경하려고합니다. –

답변

3

나는 이것을 통해 고투하는 며칠 후에 내가 원하는 것을 알아낼 수 있었다. 여기의 모델에는 많은 활동이 있습니다 (질문의 원래 질문과 달리 많은 답변이 있음).

이것은 내 jQuery 코드 (Coffeescript)입니다. jQuery 선택기를 사용하여 각 목록 항목의 ID와 각 목록 항목의 열 ID를 가져옵니다. 나는 레일 컨트롤러로 다시 AJAX 호출을 구문 분석하는 방법이 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() 

과 같은 매개 변수로 밀기 : 내가 배열의 각 {"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 

다시 내 모델에서, 나는 주문이 위치의에서 "활동"협회는 그래서, 그것은 올바른 위치에 표시됩니다.나는이 2 개 답변이에 도착 방법에 대한

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

자세한 내용 :

Formatting Parameters for Ajax POST request to Rails Controller - for jQuery-UI sortable list

jQuery AJAX POST to Rails Controller. Error when doing each_with_index (TypeError can't convert Symbol into Integer)

관련 문제