Rails PostgreSQL数组无法迭代

时间:2013-04-11 13:48:52

标签: ruby-on-rails arrays postgresql helper production-environment

我为我的控制器编写了一个辅助方法来迭代一个属性,用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与unicorn和nginx进行部署

2 个答案:

答案 0 :(得分:1)

如果你使用的是rails 4 https://github.com/rails/rails/issues/10432,我猜你也可能遇到过这个bug。基本上,迁移系统中存在一个错误,它将:string, array: true转换为普通:string指令。使用边缘东西的乐趣吧。

答案 1 :(得分:0)

我猜你用了点击在heroku上用

部署了tour数据库
heroku db:push

问题是,taps不支持Postgres数组,最终会将列强制转换为字符串。有很多解决方法。 我用的是在heroku上打开一个控制台

heroku run console

然后获得与数据库的连接

User.connection # or any of your models

然后使用connection#execute方法执行原始sql以创建备份列,删除当前字符串列并将其重新创建为数组。

您可能会发现使用heroku建议的import/export更有用

如果你没有使用heroku,那我就完全错了,我不知道你的问题是什么:)