【问题标题】:Access custom select field in Kaminari访问 Kaminari 中的自定义选择字段
【发布时间】:2016-07-09 04:58:47
【问题描述】:

我有一个分页模型,在某些情况下,我想在查询中添加一个额外的列,并在我的分页结果中检索同一列。例如:

users = User.select('users.*, users.value is NULL as val').page(2)

如果我这样做users.first['val'],那么它什么也没给我。但是如果我删除分页users = User.select('users.*, users.value is NULL as val') 那么users.first['val'] 会给我我想要的。我怎样才能用 Kaminari 做到这一点?

【问题讨论】:

  • 请发布您的完整查询(最好是带有关联定义的模型的相关部分),因为 您的示例查询似乎可以与 Kaminari 一起工作,因此目前没有问题需要解决.

标签: ruby-on-rails pagination kaminari


【解决方案1】:

我发现你的代码存在一些问题,我的测试表明你想要的东西应该可以与 Kaminari 一起使用。

首先,您要在查询中“添加额外”列,然后您还应该选择 User 对象本身,而不仅仅是额外的列:

users = User.select('users.*, users.value is NULL as val')

接下来,您可能忘记在访问属性之前从返回的(分页)数组中选择一个用户,所以不是:

users['val']

你可能应该这样做:

users.first['val']

最后,看看我对 Kaminari 的测试和 select 中的一个自定义列(我的 null 测试列是 name 而不是 value,但原理是一样的):

>> User.page(1).map(&:name)
=> ["ddddd", nil, nil, nil, "0", nil]

>> User.select('users.name is NULL as val').page(1).map{ |user| user['val'] }
=> [0, 1, 1, 1, 0, 1]

所以,它似乎有效!

【讨论】:

  • 啊是的抱歉编码不好,我写代码的速度太快了,我更新了问题。其实查询要复杂很多,有几个joinsincludes,会不会是问题所在?顺便说一句,您的第二个查询应该是 User.select('users.*, users.name is NULL as val').page(1).map{ |user| user['val'] } 以匹配第一个问题
  • 所以我想我发现问题出在哪里了,这是因为我也在查询中做了一个includes,而select和之间似乎有一个众所周知的问题includesActiveRecord: stackoverflow.com/a/4048882/517193
  • 好的,你还需要帮助吗?如果是,请将完整的查询添加到您的问题中。
猜你喜欢
  • 2012-11-03
  • 1970-01-01
  • 1970-01-01
  • 2013-03-04
  • 2023-03-13
  • 1970-01-01
  • 2010-12-30
  • 1970-01-01
  • 2012-12-27
相关资源
最近更新 更多