【问题标题】:Get a limited set of results in sub collection在子集合中获取有限的结果集
【发布时间】:2014-03-21 12:36:19
【问题描述】:

我试图在子集合中获得一组有限的结果

基本上我有这个:

user = Model::User.find(token)
playlists = user.playlists
playlists.each do |playlist|
  criteria = playlist.tracks.limit(4)    #I Want to limit these to return max 4 tracks
  #the criteria is perfect here but the decorator still returns all the tracks
  #setting this criteria on the user saves the new tracks list limited by 4
  #like this:
  playlists[index].tracks = criteria
end

decorator = Decorator::PlaylistCollection.new(playlist)
response_with decorator

这不起作用,我的问题是如何限制每个播放列表最多返回 4 首曲目

我想要的是响应包含所有播放列表,其中最多包含 4 首曲目(也应优化对 mongo 的查询)

  • 显示所有播放列表
  • 每个播放列表最多包含 4 首曲目
  • 需要防止从 mongoid/mongo 调用播放列表的所有曲目

谢谢!

【问题讨论】:

  • 你到底想在each 块中做什么?您没有将前 n 条记录保存在任何地方。
  • 不,这段代码不起作用,我想用装饰器构建响应,每个播放列表有 4 个轨道
  • 看看这里,这似乎是一个类似的问题:stackoverflow.com/questions/16074404/…
  • 不,不是,我不想计算标准返回了多少结果。 (count 返回播放列表中的所有曲目并忽略限制)。那不是我的问题
  • 我已经成功了,我会在几分钟内发布答案

标签: ruby ruby-on-rails-4 mongoid


【解决方案1】:

我得到了解决方案,mongoid 创建了一个带有 ids (track_ids) 的数组,其中包含列表中所有曲目的 id。

通过覆盖 track_ids 而不是轨道,不会在 mongoid 中查询或存储任何内容。

user = Model::User.find(token)
playlists = user.playlists
playlists.map do |playlist|
  playlist.track_ids = playlist.track_ids.take(4)
end

decorator = Decorator::PlaylistCollection.new(playlist)
response_with decorator

【讨论】:

    【解决方案2】:

    我认为下面的代码可以解决问题。

    user = Model::User.find(token)
    playlists = user.playlists[0..3]
    decorator = Decorator::PlaylistCollection.new(playlist)
    response_with decorator
    

    【讨论】:

    • 你得到了前 3 个播放列表,我想要的是得到所有的播放列表,但每个播放列表只有 4 个曲目,而不是所有曲目
    猜你喜欢
    • 2013-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-27
    • 2017-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多