7

这是我在这里的第一篇文章,所以请放轻松。我正在尝试在 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

结尾

我一生都无法弄清楚为什么会这样。但那是因为我不知道我在做什么。任何建议/帮助将不胜感激。

4

3 回答 3

12

问题是这样的:

t.array :paint_hex

没有称为 的列类型array。如果你真的想保存一个数组,你可以使用stringortext然后序列化这个值。

class Paint < ActiveRecord::Base
  serialize :paint_hex
end

顺便说一句:为所有属性名称添加前缀paint_是 Rails 应用程序的一种非常不常见的命名方案。

于 2012-06-28T23:58:05.270 回答
10

在 Rails 4 和使用 PostgreSQL 中,您实际上可以在数据库中使用数组类型:

移民:

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 回答