2012-05-29 93 views
0

我是一个RoR begginer,我正在开发使用MySQL的应用程序,但Heroku使用PostgreSQL ,所以我的arel工作不正常。Ruby on Rails - MySQL和PostGres

我搜索了关于输出的错误,但在我的情况下,因为我在做一个HABTM表之间的查询 ,事情并没有那么顺利。

基本上,产品has_and_belongs_to_many类别。 我的关系是 所有设置和一切本地工作,但部署时发生500错误。

于是不再拖延,问题是:

if params[:fc].present? #(checks if checkboxes have been ticked) 

arel=arel.joins('INNER JOIN categories_products ON products.id=categories_products.product_id') 

arel=arel.where('categories_products.category_id in (:fc_list)', :fc_list => params[:fc]).uniq 

arel=arel.group('product_id').having('count(category_id) = :size', :size => params[:fc].size) 

end 

这样的想法是让用户(...这工作好本地和在Heroku上......以前查询)选中复选框列表,然后显示选中类别中的所有产品。

我的heroku错误是:“products.id”必须出现在GROUP BY子句中,或者在集合函数中使用 。

这告诉我错误是GROUP BY和drom我读的文档,我必须把所有的列放在这里。但由于它是一个HABTM关系,所以只有其他列在那里,当我把它放置时,arel点正常运行。

我知道这里已经有线程,但没有人修复了我的 问题。

预先感谢您。

问候, 米格尔A.

+0

不要试图为数据库A开发数据库并释放数据库B,那样会失败。 PostgreSQL不接受非法的GROUP BY结构,就像MySQL一样。 –

+0

嗯好的。恐怕我必须这样做,或者完全迁移到Postgres。你知道我怎么能把它作为合法的GROUP BY吗?我很难过。先谢谢你。 – Silver

回答

0

这是关系到这一点:

Heroku (PG::Error: ERROR: column must appear in the GROUP BY clause or be used in an aggregate function

他们使用的Postgres的旧版本中的Heroku不支持你想要做什么。使用Heroku共享的PostgreSQL插件可以解决这个问题。

虽然,我也建议你的开发环境看起来尽可能的和Heroku环境一样。这意味着使用相同版本的红宝石和相同的数据库...

+0

我发现[this](http://blog.heroku.com/archives/2012/5/1/heroku_s_new_free_postgresql_9_1_development_database/)是否100%免费,如果我更新它会解决我的问题吗?问候 – Silver

+0

我这么认为,我刚才读到,我建议你已经弃用,他们推荐使用postgres:dev。我认为你也将不得不按照步骤来推广DB – jordinl

+0

去新的'dev数据库'后仍然有同样的错误。关于如何让我的GROUP合法用于Postgres的任何想法? – Silver