0

scriptable ヘル 퍼 메소드 sortable_element를 사용하여 Rails 애플리케이션에서 드래그 앤 드롭 정렬을 구현하려고합니다. 뷰의 코드는 매우 단순 해 보이지만 "위치"열을 업데이트하기 위해 컨트롤러에 무엇을 쓸지는 분명하지 않습니다. "이익/peer_group_map.erb"find()에 의해 생성 된리스트에서 sortable_element를 사용합니다.

<li class = "interest_<%[email protected]_interest.id.to_s%>_siblings_list" 
     id = "interest_<%=related_pg.interest_id.to_s%>_siblings_list_<%=related_pg.id.to_s%>"> 

,

<ul id = "interest_<%[email protected]_interest.id.to_s%>_siblings_list"> 
    <%= render :partial => "/interests/peer_group_map", :collection => @maps, :as => :related_pg %> 
</ul> 

<%= sortable_element("interest_"[email protected]_interest.id.to_s+"_siblings_list", :url => {:action => :resort_related_pgs}, :handle => "drag") %> 
<br/> 

그리고 여기 부분에서 해당 줄입니다 : 여기

는 "_show_related_pgs.erb"내가보기에있어 무엇 Scriptaculous UI 마법은 이것들과 잘 동작하지만,이를 반영하기 위해 db의 "position"열을 어떻게 바꿀 수 있을지는 확신 할 수 없습니다. @maps 컬렉션을 다시 컨트롤러로 전달해야하며 그것을 반복하고 각 속성의 "position"을 증가/감소 시키라고 지시해야합니까? 그렇다면 어떻게 아이템을 위로 옮겼는지 알 수 있습니까? 생성 된 HTML에서 Chrome dev-tools를 사용하여 구체적인 것을 찾을 수 없습니다.

각각의 재정렬이 끝나면 각 관심사의 이름 옆에 위치가 인쇄되기 때문에 @maps 컬렉션을 다시 렌더링해야합니다 (sortable_element에 대한 호출에서 지정된 "핸들"로 사용하고 있습니다). (위)) - 이것은 사소한 것이어야합니다.

의견이 있으십니까?

감사합니다, -e

답변

0

나는 일반적으로 다음과 같습니다 내 컨트롤러에서 정렬 작업을 만듭니다

def sort 
    order = params[:my_ordered_set] 
    MyModel.order(order) 
    render :nothing => true 
end 

경로 추가하는 것을 잊지 마십시오

map.resources :my_model, :collection => { :sort => :put } 

을 이제, MyModel에 정렬 된 모든 레코드를 하나의 쿼리로 업데이트하는 클래스 메서드를 추가합니다 (이는 mysql에서만 작동합니다.) :

def self.order(ids) 
    update_all(
    ['ordinal = FIND_IN_SET(id, ?)', ids.join(',')], 
    { :id => ids } 
) 
end 

단일 쿼리 방법은 Henrik Nyh에서 제공됩니다.

+0

감사합니다. - 이것을 설명하는 railscast를 발견했습니다.이 수정은 약간 수정되었습니다 (변수 div 이름을 유지하기 위해 this_thing 대신 params에 문자열을 제공함). 하지만이 "한 번에 모두 업데이트"는 정말 빠르고 유용합니다/고맙습니다! 감사합니다! –

+0

레일 스 캐스트 URL을 게시 할 수 있습니까? – sethvargo