我的控制器中Postgres数据类型不匹配的Heroku WHERE错误

时间:2014-04-28 01:58:37

标签: ruby-on-rails postgresql heroku ruby-on-rails-4 rails-activerecord

  

PG :: DatatypeMismatch:错误:WHERE的参数必须是boolean类型,而不是类型整数   第1行:选择"时间卡"。* FROM"时间卡" WHERE(user_id)ORDE ...

这在我的控制器中:

def index

 @users = User.find(:all)   
 @timecards = Timecard.find(:all, :conditions => "user_id", :order => "checkin_time ASC")

 @worklogs = Timecard.find(:all, :conditions => {:user_id=>current_user}, :order => "checkin_time ASC")
 @jobs = Job.find(:all, :conditions =>"id") 

end

2 个答案:

答案 0 :(得分:2)

问题就在这里:

@timecards = Timecard.find(:all, :conditions => "user_id", :order => "checkin_time ASC")
# ----------------------------------------------^^^^^^^^^

如果在:conditions中给它一个字符串,则该字符串直接进入SQL和

where (user_id)

对PostgreSQL没有任何意义,因为user_id是一个整数列。您将遇到与Job.find(:all, :conditions => "id")相同的问题。我不知道:conditions应该是什么。

我还怀疑你是在SQLite上开发的,因为你(可能)在开发或测试环境中没有发现这个问题。如果你在PostgreSQL之上进行部署,那么你真的应该在PostgreSQL之上进行开发和测试。您应该始终使用相同的堆栈进行开发,测试和部署,没有数据库可移植性(除非您自己执行),并且没有ORM可以保护您免受数据库差异的影响。

我还建议您放弃旧的Rails2风格的find(:all, ...)内容,转而使用更现代的.where(...).where(...).order(...)方法。

答案 1 :(得分:1)

最好是

Timecard.where(user_id: current_user.id).order(:checkin_time)