Rails PostgreSQL数组无法迭代

问题描述:

我为我的控制器编写了一个辅助方法来遍历一个属性,使用PostgreSQL将其表示为一个数组。Rails PostgreSQL数组无法迭代

def format_cf array 
    nums = "" 
    array.each { |c| nums += "#{c}, " } 
    unless nums.blank? 
    nums.chop!.chop! 
    end 
    nums 
end 

这样,我没有得到凌乱{}字符在我看来。我将这个属性的空值作为字符串“{}”实现,这意味着我在迁移中设置了默认值。这对我的开发环境来说不是问题,因为它将它解释为一个空数组。不过,现在在生产,这个辅助方法是抛出一个错误,说

ActionView::Template::Error (undefined method `each' for "{}":String) 

是我的实现错在这里,或任何人都可以想一些不起眼的设置比较我development.rb和production.rb时,我可能忽略的?

编辑:2013-04-11 9:00

我使用Capistrano的与麒麟和nginx的

正在部署我客串,你用水龙头与在Heroku上部署游数据库

heroku db:push 

问题是水龙头不支持Postgres数组,并且最终将该列转换为字符串。对此有很多解决方法。 我使用的是开在Heroku

heroku run console 

控制台然后获取数据库

User.connection # or any of your models 

连接,然后以创建备份柱与connection#execute方法执行原始的SQL,删除当前的字符串列并将其重新创建为一个数组。

你可能会发现它更有用的使用由Heroku的

,并建议import/export如果你不使用Heroku的,那么我完全错了,我不知道你的问题是:)

什么
+0

感谢您的回应!实际上,我正在使用独角兽和capistrano的nginx进行部署。有关这方面的知识? – 2013-04-11 13:59:41

+0

对不起,但没有...好吧,它看起来像我与heroku的问题,但!祝你好运 :) – pjam 2013-04-11 14:02:05

如果您使用rails 4 https://github.com/rails/rails/issues/10432,我会猜测您也可能遇到此错误。基本上,迁移系统中有一个错误,将:string, array: true变成正常的:string指令。使用边缘的东西的乐趣。