Rails 3 =>当我尝试rake db:migrate时,未定义的方法'array'

时间:2012-06-28 23:53:59

标签: arrays ruby-on-rails-3 scaffold dbmigrate

这是我在这里发表的第一篇文章,所以请轻松一下。我正在尝试在Rails 3.2.1中构建我的第一个应用程序。我正在尝试使用以下终端命令为Paint生成一个脚手架:

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

我不能为我的生活找出原因。但那是因为我不知道自己在做什么。任何建议/帮助将不胜感激。

3 个答案:

答案 0 :(得分:11)

问题在于:

t.array :paint_hex

没有名为array的列类型。您可以使用stringtext,然后在您确实要保存数组时序列化该值。

class Paint < ActiveRecord::Base
  serialize :paint_hex
end

顺便说一句:使用paint_前缀所有属性名称对于rails应用程序来说是一个非常罕见的命名方案。

答案 1 :(得分: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

答案 2 :(得分:2)

数组不是有效的数据库类型。你不能创建一个类型为array的列。

有一些方法可以在字段中存储数组。检查serialize方法。 您必须声明 text 类型的列,并且类中指定列serializas是array类型的对象