7

これは私の最初の投稿ですので、気楽に行ってください。Rails3.2.1で最初のアプリをビルドしようとしています。次のターミナルコマンドを使用して、ペイント用のスキャフォールドを生成しようとしています。

rails generate scaffold Paint paint_family:string paint_hex:array paint_available:boolean     paint_location:integer paint_quantity:integer paint_additional_info:text

しかし、移行しようとすると、次のエラーが発生します。

undefined method `array' for #<ActiveRecord::ConnectionAdapters::TableDefinition:0x007fbd8bdb1c58>

移行記録は次のとおりです。

  class CreatePaints < ActiveRecord::Migration
  def change
    create_table :paints do |t|
    t.string :paint_family
    t.array :paint_hex
    t.boolean :paint_available
    t.integer :paint_location
    t.integer :paint_quantity
    t.text :paint_additional_info

    t.timestamps
 end
 end

終わり

私は一生の間、これがなぜであるかを理解することはできません。でもそれは自分が何をしているのかわからないからです。任意のアドバイス/ヘルプをいただければ幸いです。

4

3 に答える 3

12

問題はこれです:

t.array :paint_hex

という列タイプはありませんarray。本当に配列を保存したい場合は、stringまたはを使用してから値をシリアル化できます。text

class Paint < ActiveRecord::Base
  serialize :paint_hex
end

ところで、すべての属性名の前に をpaint_付けることは、Rails アプリケーションでは非常に珍しい命名スキームです。

于 2012-06-28T23:58:05.270 に答える
10

Rails 4 で PostgreSQL を使用すると、実際に DB で配列型を使用できます。

移行:

class CreateSomething < ActiveRecord::Migration
  def change
    create_table :something do |t|
      t.string :some_array, array: true, default: []
      t.timestamps
    end
  end
end
于 2014-03-24T16:04:01.403 に答える
2

配列は有効なデータベース タイプではありません。配列型の列を作成することはできません。

配列をフィールドに格納するには、いくつかの方法があります。シリアル化方法を確認してください。テキスト型の列を宣言し、クラスで、列が配列型のオブジェクトをシリアル化することを指定する必要があります

于 2012-06-29T00:00:25.457 に答える