2011-06-28 3 views

答えて

5

すべてが0が実際真実であることを意味しているnilfalse,以外Rubyで真では何も返さないです。

ような何か試してみてください。これは一例で

def has_user_voted?(user) 
    self.poll_votes.where(:user_id => user.id).length > 0 
    end 

を、私は、あなただけ使用することがありますされていない場合、あなたの現実のバージョンがpoll_votes,を利用しますので、あなたも投票をしたいと推定します#count

+0

非常にいいです。 ==を>に変更すると、トリックが実行されました。ありがとうございました – AnApprentice

+1

私とLukeの答えに記載されているように、ここで設定した結果全体を返すことは、不必要に非効率的です。代わりに 'exists?'か 'count'を使うべきです。 –

1

一致するレコードがあるかどうかだけを知りたい場合は、不要な行を取得してすべてのオブジェクトをインスタンス化するのではなく、組み込みのcountメソッドを使用する必要があります。デフhas_user_voted

:注意すべきもう一つのわずかな専門的

def has_user_voted?(user) 
    self.poll_votes.exists?(['user_id = ?', "%#{user.id}%"]) 
end 
2

これはかなり効率的な方法でなければなりませんか?ユーザ poll_votes.where(:USER_ID => user.id).size> 0 端

.sizeは、DB .countを発行するか、または関連付けが既にロードされている場合、それは、配列の長さを取得しますSQL呼び出しもしません。私はいつもサイズを使います。

0

:例えば:

def has_user_voted? user 
    poll_votes.where(:user_id => user.id).count > 0 
end 
関連する問題