當在活動記錄中進行搜索時,我正在查找沒有歸檔位設置爲true的記錄。activerecord搜索條件 - 尋找空或假
某些歸檔位爲空(未歸檔)其他歸檔設置爲false。
顯然,
Project.all(:conditions => {:archived => false})
錯過與空值歸檔位的項目。如何選擇所有未歸檔項目的活動記錄?
當在活動記錄中進行搜索時,我正在查找沒有歸檔位設置爲true的記錄。activerecord搜索條件 - 尋找空或假
某些歸檔位爲空(未歸檔)其他歸檔設置爲false。
顯然,
Project.all(:conditions => {:archived => false})
錯過與空值歸檔位的項目。如何選擇所有未歸檔項目的活動記錄?
試試這個(中梁2):
Project.all(:conditions => ['archived IS NULL OR archived = ?', false])
這是舊版本的Rails的限制,如下解釋:https://rails.lighthouseapp.com/projects/8994/tickets/1181-ar-find-producing-null-when-it-should-be-is-null
@metasoarous
嘗試:
Project.all(:conditions => "archived IS NULL OR archived = 'F'")
如果你想成爲數據庫不可知論者,你可以在Rails 3:
Project.where("archived IS NULL OR archived = #{ActiveRecord::Base.connection.quoted_false}")
@ SeanLazer的答案在Rails 3.0.9中可用,看起來有點乾淨。 – John 2012-08-03 02:44:49
正確的數據庫無關的方式來做到這一點是:
Project.where("archived IS NULL OR archived = ?", false)
謝謝!適用於SQLite和Postgres。如果您認爲這不起作用,請仔細檢查您的數據庫**中的值是否爲假,而不是空值。會救了我一些困惑。 – John 2012-08-03 02:43:59
軌道4(可能更早)支持:
Project.where(archived: [false, nil])
...這是相當簡潔。
作品中的Rails 3.2.14 – Trip 2014-04-20 12:19:25
也發現了這個工作(有點題外話,但另一種方式來使用空: Project.where(存檔:VALID_VALUES + [無]) 如... Project.where (linkage:account.project_codes.map(&:id)+ [nil]) – TJChambers 2014-05-08 22:51:34
這應該是被接受的答案。 – 2015-10-09 19:29:44
Ron - 我按照你的建議從SQLite收到以下錯誤消息。 SQLite3 :: SQLException:沒有這樣的列:FALSE:SELECT * FROM「review_phases」WHERE(關閉IS NULL或關閉= FALSE)LIMIT 20 OFFSET 0是否SQLite只是處理布爾值不同而不工作? – metasoarous 2010-03-25 20:32:32