2012-06-28 37 views
4

這是我的第一篇文章,所以很容易。我正在嘗試在Rails 3.2.1中構建我的第一個應用程序。我嘗試使用以下終端命令生成用於油漆支架:Rails 3 =>當我嘗試耙分貝時未定義的方法'數組':migrate

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 

結束

我不能爲我的生活弄清楚爲什麼這是。但那是因爲我不知道我在做什麼。任何建議/幫助將不勝感激。

回答

10

問題是這樣的:

t.array :paint_hex 

沒有名爲array列類型。你可以使用stringtext,然後如果你真的想要保存一個數組,那麼序列化這個值。

class Paint < ActiveRecord::Base 
    serialize :paint_hex 
end 

只是順便:加前綴的所有屬性名與paint_是Rails應用程序相當少見的命名方案。

+2

非常感謝。並感謝'paint_'上的註釋。 – ErikAtLarge

+0

然後給我一個upvote並選擇我的答案作爲正確的答案。這就是我們如何在stackoverflow上顯示讚賞... – iblue

+0

看起來我必須得到15分才能投票 – ErikAtLarge

2

將其數組不是有效的數據庫類型。你不能創建一個類型爲數組的列。

有一些方法可以在一個字段中存儲數組。檢查serialize方法。 您必須聲明類型文本和在類指定列serializas類型的數組對象的列

+0

感謝Miguel,我會按照您的建議努力解決它! – ErikAtLarge

6

在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 
相關問題