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

私は現在、ユニコーンとnginxでカピストラーノを使用して展開しています

4

2 に答える 2

1

I'm going to guess you may have run into this bug as well, if you're using rails 4 https://github.com/rails/rails/issues/10432. Basically there's a bug in the Migrations system that turns :string, array: true into a normal :string directive. The joys of using edge stuff huh.

于 2013-05-11T02:32:22.583 に答える
0

タップを使用してherokuにツアーデータベースをデプロイしたと思います

heroku db:push

問題は、タップが Postgres 配列をサポートしておらず、列を文字列としてキャストしてしまうことです。そのための回避策はたくさんあります。私が使用したのは、herokuでコンソールを開くことでした

heroku run console

次に、データベースへの接続を取得します

User.connection # or any of your models

connection#execute次に、バックアップ列を作成し、現在の文字列列を削除して配列として再作成するために、メソッドで raw sql を実行します。

おそらく、heroku が推奨するインポート/エクスポートを使用する方が便利であることがわかるでしょう。

そして、あなたがherokuを使っていないなら、私は完全に間違っていて、あなたの問題が何であるかわかりません:)

于 2013-04-11T13:58:36.653 に答える