这是我在这里发表的第一篇文章,所以请轻松一下。我正在尝试在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
端
我不能为我的生活找出原因。但那是因为我不知道自己在做什么。任何建议/帮助将不胜感激。
答案 0 :(得分:11)
问题在于:
t.array :paint_hex
没有名为array
的列类型。您可以使用string
或text
,然后在您确实要保存数组时序列化该值。
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类型的对象