class Slot < ActiveRecord::Base
has_many :media_items, dependent: :destroy
end
class MediaItem < ActiveRecord::Base
belongs_to :slot
end
的MediaItems
一個簡單關聯每Slot
是有序的,有一個叫ordering
場。 並想避免n + 1查詢但我沒有嘗試過。我讀了一些相關博客文章,railscasts等,但嗯..他們從來沒有在一個單一的模式運作等等...
我要做的就是:
def update
@slot = Slot.find(params.require(:id))
media_items = @slot.media_items
par = params[:ordering_media]
# TODO: IMP remove n+1 query
par.each do |item|
item_id = item[:media_item_id]
item_order = item[:ordering]
media_items.find(item_id).update(ordering: item_order)
end
@slot.save
end
params[:ordering_media]
是一個JSON陣列media_item_id
和爲ordering
整我嘗試之類的東西
@slot = Slot.includes(:media_items).find(params.require(:id)) # still n+1
@slot = Slot.find(params.require(:id)).includes(:media_items) # not working at all b/c is a Slot already
media_items = @slot.media_items.to_a # looks good but then in the array of MediaItems it is difficult to retrieve the right instance in my loop
這似乎是一個常見的事,所以我認爲這是一個簡單的方法來解決這個問題。瞭解它會很好。
您更喜歡哪種方式:在插槽表單上爲每個媒體項目填寫訂單字段,或將媒體項目拖放到插槽展示上? – 2014-10-23 11:50:38