2016-12-04 66 views
1

我建立一個Rake任務來收集有特色的Rake任務與零值找到屬性

namespace :updates do 
    desc "Update from nil values" 
    task :companies => :environment do 
    nil_featured_companies = Company.where("featured = ?", nil) 
    nil_featured_companies.each do |co| 
     co.update_featured_to_false 
    end 
... 

一個零值,當我在鐵軌控制檯檢查記錄,我得不到任何回報。如果我修改查詢搜索假值,我得到一個回

Company.where("featured = ?", false) 

我想只有零的特色值的記錄,並將其更新爲false。用nil查找所有特色值的正確語法是什麼?

回答

1

使用

Company.where(featured: nil) 

Company.where("featured is null") 
+0

我已經試過了,但是我得到一個,並且當我運行companies.ach {| c | c.update_attribute(:featured,false)}我得到這個錯誤ActiveRecord :: StatementInvalid:PG :: InFailedSqlTransaction:錯誤:當前事務中止,命令被忽略,直到事務處理結束 :SELECT「companies」。* FROM「companies」 WHERE「公司」,「精選」IS NULL –

0

用途:

Company.where("featured is ?", nil) 
1

嘗試這樣的:

Company.where(featured: nil).each do |co| 
    co.update_attribute(:featured, false) 
end 

ActiveRecord::StatementInvalid: PG::InFailedSqlTransaction: ERROR: current transaction is aborted

就是說PG引發的異常和未來的交易在這方面

1

不允許試一下這個(你是確保數據類型是一個布爾值,對吧?)

Company.where(featured: nil).each do |each| 
    each.update_attribute("featured", false) 
    end