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