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
答案 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)