jQuery UI Sortable を使用して、Web サイトの行を並べ替えています。
これが私の見解です:
<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:
リリースごとに、n個のリリース アイテムがあります。これらのリリース アイテムは、サイト上での表示用にitem_type
列ごとに分けられています (例: 一般、プロジェクト、データ、パッチ)。そのため、サイトには 4 つの異なるアイテム リストがあり、それら 4 つのリストを個別に並べ替えられるようにしたいと考えています。上記のように、コントローラーparams['item']
のアクションに渡される配列にはprioritize
、並べ替える必要がある項目のみが含まれています。
私が実行している問題は、アクションの最初の 2 行が、配列prioritize
内のものだけでなく、すべてのリリース アイテムを取得することです。params['item']
配列内の値は、並べ替える必要があるリリース アイテムの ID です。すべてのリリース アイテムを取得する代わりに、params['item']
配列内にあるアイテムのみを取得したい。選択できる ReleaseItem モデルもあります。だから、私はこれをやろうとしています:(わかりやすくするために、これは正しいコードではないことを知っています)
item = ReleaseItem.find(conditions: "id in params['item']")
それはもう少し理にかなっていますか?私はあなたの助けに感謝します!