访问Kaminari中的自定义选择字段

时间:2016-03-22 10:39:31

标签: ruby-on-rails pagination kaminari

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

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一起做这个?

1 个答案:

答案 0 :(得分:0)

我发现您的代码存在一些问题,我的测试显示您想要的内容与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]

所以,它似乎有效!