Arrays 轨道3=>;未定义的方法';数组';当我尝试rake db:migrate时
这是我在这里的第一篇文章,所以放松点。我正在尝试在Rails 3.2.1中构建我的第一个应用程序。我正在尝试使用以下终端命令生成用于绘制的脚手架:Arrays 轨道3=>;未定义的方法';数组';当我尝试rake db:migrate时,arrays,ruby-on-rails-3,scaffold,dbmigrate,Arrays,Ruby On Rails 3,Scaffold,Dbmigrate,这是我在这里的第一篇文章,所以放松点。我正在尝试在Rails 3.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 但当我尝试迁移时
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>
的未定义方法“array”#
以下是迁移记录:
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
class CreatePaint
结束
我一辈子都搞不懂为什么会这样。但那是因为我不知道自己在做什么。任何建议/帮助都将不胜感激。问题在于:
t.array :paint_hex
没有名为array
的列类型。如果确实要保存数组,可以使用string
或text
,然后序列化该值
class Paint < ActiveRecord::Base
serialize :paint_hex
end
class Paint
顺便说一句:对于rails应用程序来说,在所有属性名前面加上
paint\ucode>是一种非常少见的命名方案。数组它不是一种有效的数据库类型。不能创建类型为array的列
有一些方法可以将数组存储在字段中。检查方法。
您必须声明类型为text的列,并在类中指定列序列化为Rails 4中类型为array的对象,并且使用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
class-CreateSomething
然后向上投票,选择正确答案。这就是我们对stackoverflow表示感谢的方式。。。