将组合模型与 pagey 结合使用,出现未定义方法“偏移”错误

sup*_*bot 1 ruby pagination ruby-on-rails

我正在使用佩吉。我将两个模型合并为一个,并在该组合模型上使用了 pagey。我收到此错误:

undefined method `offset' for #<Array:0x00007f886f88b3b0>
Run Code Online (Sandbox Code Playgroud)

下面突出显示代码的最后一行。

我的代码:

@problems = Problem.me_and_friends(current_user)
@activities = Activity.me_and_friends(current_user)
@combine = (@problems + @activities).sort{|a,b| a.created_at <=> b.created_at }
@pagy, @combined = pagy_countless(@combine, items:100, link_extra: 'class="" style="color:black; margin:3px;"')

Run Code Online (Sandbox Code Playgroud)

单独对@problems 使用分页效果很好。

我将不胜感激任何帮助。

bas*_*isk 5

一旦您调用(@problems + @activities),您就将 转换ActiveRecord::Relation为 an array(这也不好,因为您将所有数据库行加载到内存中,对它们进行排序,然后对它们进行分页)。Pagy 期望 ActiveRecord::Relation 能够工作,因此会出现错误。

可以考虑多种解决方案,

  • 更改您的 UI 以在单独的 UI 中显示问题和活动,然后您可以分别对它们进行分页
  • 更新模型以将问题和活动存储在同一个表中(可能只是指向 aProblem或 an的参考表Activity
  • 如果其中任何一个都不可行,您可以考虑推出分页的自定义解决方案,但这会很棘手。

更新:2021 年 6 月 21 日

如果您使用 Rails 6,它引入了委托类型的概念,非常适合这种情况。链接中给出的示例提到了跨不同表的分页问题。