2016-03-22 11 views
0

私はページが付けられたモデルを持っていますが、場合によってはクエリに余分な列を追加して、同じページの結果を同じ列で取得したいと思っています。例: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']私に何をしたいですか。私はカミナリでこれをどうやってすることができますか?

+0

**あなたのサンプルクエリはKaminariで正常に動作するように見えるので、フルクエリ(および理想的には関連付けの定義を持つモデルの関連部分)を投稿してください。 – BoraMa

答えて

0

私はあなたのコードにいくつかの問題があることを見ています。私のテストでは、あなたが望むものはカミナリでうまくいくはずです。

まず、あなたは、あなたが、また余分な列だけでなく、Userオブジェクト自体を選択する必要があり、クエリに列「余分を追加」したいことを書く:

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

次に、あなたはおそらくに忘れてしまいました属性にアクセスする前に返された(ページ番号付き)配列からユーザーを選択し、その代わりに:

users['val'] 

にあなたは、おそらくのような何かをする必要があります。

users.first['val'] 

そして最後に、雷や選択でカスタム列(ヌルについて試験した私のコラムは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] 

だから、それはに思えます作業!

+0

ああ、悪いコーディングのため申し訳ありません、私はコードを書くには少し速く行きました、私は質問を更新しました。実際には、クエリはそれよりもはるかに複雑であり、いくつかの '結合 'と'インクルード'を伴うと、問題になる可能性がありますか? btw、2番目のクエリは 'User.select( 'users。*、users.nameはvalとしてNULLです')でなければなりません。最初の問題 – Guillaume

+0

と一致するようにuser ['val']} 'を実行してください。問題の原因がわかりました。クエリに' include 'も含まれていて、よく知られているようです'select'と' ActiveRecord'を含む 'includes'の間の問題:http://stackoverflow.com/a/4048882/517193 – Guillaume

+0

OKそしてこれでも何とかして助けが必要ですか?はいの場合は、質問に完全な質問を追加してください。 – BoraMa

関連する問題