【问题标题】:ActiveRecord::StatementInvalid (PG::Error: ERROR: column does not existActiveRecord::StatementInvalid (PG::Error: ERROR: 列不存在
【发布时间】:2012-08-14 00:45:12
【问题描述】:

在部署到 heroku 时遇到关于使用 find 语句构建的表的问题。它们在使用本地服务器时运行良好,但在 heroku 上却没有,我收到“很抱歉,但出了点问题”错误。我遇到了一些其他线程,这表明它可能是 postgresql 中区分大小写的问题,并不是我对此了解很多,但我尝试确保大写始终保持一致,并且似乎没有什么不同。

Heroku 日志

2012-08-14T00:31:30+00:00 app[web.1]: Processing by ApartmentsController#aptMenu as HTML
2012-08-14T00:31:30+00:00 app[web.1]: Completed 500 Internal Server Error in 4ms
2012-08-14T00:31:30+00:00 app[web.1]: 
2012-08-14T00:31:30+00:00 app[web.1]: LINE 1: SELECT "apartments".* FROM "apartments"  WHERE (bed = 0)
2012-08-14T00:31:30+00:00 app[web.1]: ActiveRecord::StatementInvalid (PG::Error: ERROR:  column "bed" does not exist

控制器

def aptMenu
  @apartments = Apartment.all
  @studio = Apartment.find(:all, :conditions => ["bed = 0"])

架构

create_table "apartments", :force => true do |t|
t.integer  "bed"

我对这种看到感到很困惑,因为根据我所看到的一切,“床”列确实存在。任何帮助将不胜感激。

【问题讨论】:

    标签: ruby-on-rails activerecord heroku find


    【解决方案1】:

    出现此问题的原因是生产数据库上的 Apartment 表缺少列 Bed。您需要在生产端进行迁移。

    heroku rake db:migrate

    看看新列是否出现。

    确保你也重新启动你的heroku。

    heroku restart

    【讨论】:

    • 试过了,但不幸的是没有用。问题是“床”列是存在的原始列之一,后来没有添加,所以如果它没有被迁移但其余的已经迁移,那就很奇怪了。
    • 你能试试这个吗? @studio = Apartment.find_all_by_bed(0) 而不是您当前的查找方法?
    • 试过了,它没有用(给出了一个没有找到方法的错误),但让我想到了切换到我可能已经尝试过的 where 语句,但在我这样做之后它开始工作了!非常感谢您的帮助,如果您没有提供帮助,可能会陷入循环一段时间!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-14
    • 2022-09-24
    • 1970-01-01
    • 2012-03-13
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多