本地和生产数据库列名称不匹配(Heroku)

时间:2014-01-17 00:41:18

标签: ruby-on-rails heroku

我想按日期字符串对帖子进行分组,在该组中我想按名称对它们进行排序。日期列名为 releaseDate ,名称称为 releaseName

这就是我在控制器中所拥有的:

   def index
      @upcoming_releases = UpcomingRelease.all(:order => 'releaseDate, releaseName')
      respond_to do |format|
         format.html
         format.json { render json: @upcoming_releases }
      end
   end

在我的本地应用程序中工作正常但是一旦我部署到Heroku我就会收到此错误:

2014-01-17T00:21:54.801562+00:00 app[web.1]: : SELECT "upcoming_releases".* FROM "upcoming_releases"   ORDER BY releaseDate, releaseName):
2014-01-17T00:21:54.801562+00:00 app[web.1]: 
2014-01-17T00:21:54.801336+00:00 app[web.1]: ActiveRecord::StatementInvalid (PG::UndefinedColumn: ERROR:  column "releasedate" does not exist
2014-01-17T00:21:54.801562+00:00 app[web.1]: 
2014-01-17T00:21:54.801336+00:00 app[web.1]: : SELECT "upcoming_releases".* FROM "upcoming_releases"   ORDER BY releaseDate, releaseName):
2014-01-17T00:21:54.801336+00:00 app[web.1]: 
2014-01-17T00:21:54.801336+00:00 app[web.1]: ActiveRecord::StatementInvalid (PG::UndefinedColumn: ERROR:  column "releasedate" does not exist
2014-01-17T00:21:54.801562+00:00 app[web.1]:   app/controllers/upcoming_releases_controller.rb:5:in `index'

我尝试将 releaseDate 更改为 release_date ,但它不起作用。有什么帮助吗?

感谢。

1 个答案:

答案 0 :(得分:1)

对pg列案例敏感性的一点研究使我得到了这个网址https://drupal.org/node/1622982。似乎为了让pg停止将列名更改为小写,您需要将其包装在引号中。尝试

UpcomingRelease.all(:order => '"releaseDate", "releaseName"')

如果您编写了大量的sql语句,我认为这将成为一个问题。一种解决方案是遵循rails约定并更改列名以使用下划线表示法。您可以通过创建迁移并添加以下内容来实现此目的

rename_column :upcoming_releases, :releaseDate, :release_date

另一个问题是确保您使用pg作为本地数据库,因此您很可能拥有与生产服务器相同的设置。