Rails 3 => 当我尝试 rake db:migrate 时未定义的方法'array'
Posted
技术标签:
【中文标题】Rails 3 => 当我尝试 rake db:migrate 时未定义的方法\'array\'【英文标题】:Rails 3 => Undefined method 'array' when I try to rake db:migrateRails 3 => 当我尝试 rake db:migrate 时未定义的方法'array' 【发布时间】:2012-06-30 13:16:30 【问题描述】:这是我在这里的第一篇文章,所以请放轻松。我正在尝试在 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
结束
我终其一生都无法弄清楚这是为什么。但那是因为我不知道我在做什么。任何建议/帮助将不胜感激。
【问题讨论】:
【参考方案1】:问题是这样的:
t.array :paint_hex
没有名为array
的列类型。如果你真的想保存一个数组,你可以使用string
或text
然后序列化这个值。
class Paint < ActiveRecord::Base
serialize :paint_hex
end
顺便说一句:在所有属性名称前加上 paint_
是一种非常不常见的 Rails 应用程序命名方案。
【讨论】:
然后给我一个upvote并选择我的答案作为正确的答案。这就是我们对***表示赞赏的方式......【参考方案2】:在 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
【讨论】:
【参考方案3】:数组不是有效的数据库类型。您不能创建类型为数组的列。
有一些方法可以将数组存储在字段中。检查serialize 方法。 您必须声明 text 类型的列,并且在类中指定列序列化为数组类型的对象
【讨论】:
以上是关于Rails 3 => 当我尝试 rake db:migrate 时未定义的方法'array'的主要内容,如果未能解决你的问题,请参考以下文章
Rails 4 - AwesomeEotPath 之后 Rake 中止,无效的 CSS
尝试 rake db:migrate 时未在 rails 项目中选择数据库