2016-12-04 31 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