本地我使用MySQL和远程我使用PostgreSQL(在Heroku上),我得到的结果不同。
控制器
@customer = current_customer
@shows = @customer.shows
@musicals = Musical.find(:all, :conditions =>['show_id in (?)', @shows])
@musicals.each do |musical|
@musical_activities = Activity.where('musical_id in (?)', musical.id).count(:group => "activity_type_id")
end
视图
<table>
<tr>
<th>Activity</th>
<th>Number</th>
</tr>
<% @activities.each do |activity_id, count| %>
<tr>
<td><%= activity_description(activity_id) %></td>
<td><%= count %></td>
</tr>
<% end %>
</table>
以前,我使用过=而不是in,但是我改变了它,因为我得到了一个PGError,说WHERE的参数必须是boolean类型,而不是类型记录。无论我使用=还是IN,我都会在本地得到正确的结果。
当我在Heroku上运行它,并用IN替换=时,错误消失,但结果是错误的。我只得到第一列(activity_description)为空的一行,而不是按活动类型显示计数,计数是聚合的,或者只显示一个activity_type。即,即使我有很多activity_types并且一行没有返回activity_id,也只会出现一行。
答案 0 :(得分:1)
当您将数据库迁移到Heroku时,Heroku在内部使用taps
gem将您的本地数据库导入Heroku。
但是,它有一些限制(外键和Postgres Bigint)。
Taps gem constraints when importing local DB to Postgres
如果,这对您没有帮助,这里有一些很棒的链接可以帮助您进行转换。
答案 1 :(得分:0)
或者,使用ClearDB mySQL插件(http://addons.heroku.com/cleardb)并保留在mySQL上。