我有一个分页的模型,在某些情况下,我想在查询中添加一个额外的列,并在我的分页结果中检索相同的列。例如:
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一起做这个?
答案 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]
所以,它似乎有效!