2016-07-12 5 views
0

テーブル内の特定の値を1つの列に持つすべてのエントリを取得しようとしていますが、クエリはその列にnil値を返します。アクティブレコード.whereは、要件に一致しない結果を見つけます。

Merit::ActivityLog.where(:related_change_type== 'Merit::BadgesSash') 

私はあなたのクエリがされるべきだと思うエントリ

#<Merit::ActivityLog id: 60, action_id: 102, related_change_type: nil, related_change_id: nil, description: "description text", created_at: "2016-07-12 19:58:05"> 
+1

シンボルと文字列の比較のためにあなたのコードは動作しません: 'related_change_type == 'Merit :: BadgesSash' falseを返します。基本的にクエリの結果は次のようになります。 'Merit :: ActivityLog.where(false)'は、db内のすべてのレコードを返します。以下の私の答えを参照してください – oreoluwa

答えて

2

を返します。

Merit::ActivityLog.where(related_change_type: 'Merit::BadgesSash') 
0

Merit::ActivityLog.where(related_change_type: 'Merit::BadgesSash')を試してみてください。それがうまくいかない場合、回避策はMerit::ActivityLog.where(related_change_type: 'Merit::BadgesSash').reject{|l| l.related_change_type.nil?}になりますが、お勧めできません...

+0

文字列: 'related_change_type == 'Merit :: BadgesSash''との比較のためにOPのコードは機能しません。これはfalseを返します。 'Merit :: ActivityLog.where(false)'はdb内のすべてのレコードを返します – oreoluwa

+0

@ololuwa nice!説明ありがとう。 .where(false)はすべてのレコードを返す –

関連する問題