1

我为我的控制器编写了一个辅助方法来遍历一个属性,使用 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 进行部署

4

2 回答 2

1

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

于 2013-05-11T02:32:22.583 回答
0

我猜你用水龙头在heroku上部署旅游数据库

heroku db:push

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

heroku run console

然后获取到数据库的连接

User.connection # or any of your models

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

您可能会发现使用heroku 建议的导入/导出更有用

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

于 2013-04-11T13:58:36.653 回答