Я использую 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']")
Значит ли это сделать немного больше смысла? Я ценю вашу помощь!
Я добавил обновление, это поможет? Благодаря! – ryanpitts1
Я обновил свой ответ, чтобы включить информацию из вашего обновления. –
Спасибо за помощь. Ваш ответ сработал. – ryanpitts1