2014-07-04 37 views
2

我有類方法來獲取帖子,但現在確定如何解決它。Sql在ActiveRecord查詢中爲空

因此,有人可以在後設置的標誌,但在此期間後沒有任何標誌:

Post.find(3).flag #nil 

這是獲得自我的帖子方法:

def self.for_review 
    joins(:flag).where('need_approval = ? and question = ? and DATE(posts.created_at) = ?', "true", "false", Time.now.to_date) 
.where('flags.need_check = ? or flags IS NULL', 'false') 
end 

問題是與第二條件爲

where('flags.need_check = ? or flag IS NULL', 'false') 

因爲標誌爲NULL不起作用。

有人知道有什麼問題嗎? 謝謝

回答

1

joins默認使用INNER JOIN;這將只會返回至少有一個標誌的帖子。你需要一個LEFT JOIN。假設Post的has_many flags

joins('LEFT JOIN flags ON posts.id = flags.post_id').where(...).where('flags.need_check = ? OR flags.id IS NULL', false) 

而且降引號truefalse,除非這些領域確實具有字面值的字符串「真」與「假」。

+0

謝謝你們。這正是我需要的。 – zauzaj

1

問題是joins(:flag)。它默認爲內連接,因此所有沒有標誌的帖子都會被拒絕。您需要改爲includes(:flag).references(:flag)

另外flags IS NULL沒有意義,因爲沒有稱爲標誌的列。取而代之的是flags.id IS NULL