0

Я использую jQuery UI Sortable для сортировки некоторых строк на моем веб-сайте.rails 3 найти значение в массиве params

Вот мое мнение:

<section class="data-list"> 
    <article id="item_<%= item.id %>" class="data sortable"> 
     <!-- stuff goes here --> 
    </article> 
</section> 

Вот мои JS:

$('.data-list').sortable({items: '> .data'}).bind('sortupdate', function() { 
    var release = getUrlVars()["id"]; 
    $.ajax({ 
     type: 'POST', 
     data: $(this).sortable("serialize"), 
     url: '/release_items/'+ release +'/prioritize' 
    }); 
}); 

Это создает params['item'] массив, который выглядит следующим образом:

["1537", "1536", "1540", "1541", "1542", "1543", "1544", "1545", "1547", "1546"] 

Вот мой код контроллера :

def prioritize 
    @release = Release.find(params[:id]) 
    item = @release.release_items 
    item.each do |i| 
     i.priority = params['item'].index(i.id.to_s).to_i + 1 
     i.save 
    end 
end 

Моя проблема в том, что у меня есть несколько release_items, которые отличает столбец item_type. И поскольку он стоит сейчас, у меня сейчас нет хорошего способа в моем контроллере фильтровать по item_type в моей линии @release = Release.find(params[:id]).

Что я хотел бы сделать, это убедиться, что в цикле item.each do |i| приоритет установлен только в том случае, если элемент находится в массиве params['item']. Как я могу это сделать? Пожалуйста, дайте мне знать, если это недостаточно ясно. Благодаря!

РЕДАКТИРОВАТЬ 1:

Для каждого выпуска, есть п количество элементов высвобождения. Элементы разблокировки выделяются для отображения на сайте по столбцу item_type (например, Общие, Проект, Данные, Патч). Таким образом, на сайте есть 4 разных списка элементов, и я хочу иметь возможность сортировать эти 4 списка отдельно. Как я уже сказал выше, массив params['item'], передаваемый в действие prioritize в контроллере, имеет только элементы, которые необходимо отсортировать, и это необходимо.

Проблема, с которой я столкнулся, состоит в том, что первые две строки в действии prioritize получат все элементы выпуска, а не только те, что находятся в массиве params['item']. Значения в массиве - это идентификаторы элементов выпуска, которые необходимо отсортировать. Вместо того, чтобы получать все элементы выпуска, я хочу получать только элементы, находящиеся в массиве params['item']. У меня также есть модель ReleaseItem, которую я могу выбрать. Таким образом, я пытаюсь сделать это: (я знаю, что это не правильный код, только ради ясности)

item = ReleaseItem.find(conditions: "id in params['item']") 

Значит ли это сделать немного больше смысла? Я ценю вашу помощь!

ответ

1

Я думаю, я понимаю, что вы пытаетесь сделать ...

def prioritize 
    @release = Release.find(params[:id]) 
    items = @release.release_items.where("id IN (?)", params['item']) 
    items.each_with_index do |item, index|   
     item.priority = index + 1 
     item.save 
    end 
end 
+0

Я добавил обновление, это поможет? Благодаря! – ryanpitts1

+0

Я обновил свой ответ, чтобы включить информацию из вашего обновления. –

+0

Спасибо за помощь. Ваш ответ сработал. – ryanpitts1

Смежные вопросы