我为我的控制器编写了一个辅助方法来迭代一个属性,用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进行部署
答案 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,那我就完全错了,我不知道你的问题是什么:)