2013-07-03 57 views
0

我试图创建具有3列URL,价格和时间戳的表...我都尝试“改变”和“向上”分贝:无法创建迁移表

class Shp < ActiveRecord::Base 
    def change 
    create_table :shps do |t| 
     t.string :url 
     t.float :price 
     t.timestamps 
    end 
    end 
end 

运行分贝:迁移似乎什么都不做,因为当我做

ActiveRecord::Base.connection.column_names("shps") 

我得到一个只有默认列的表。

=> [#<ActiveRecord::ConnectionAdapters::SQLiteColumn:0x8fc8a34 @name="id", @sql_type="INTEGER", @null=false, @limit=nil, @precision=nil, @scale=nil, @type=:integer, @default=nil, @primary=nil, @coder=nil>, #<ActiveRecord::ConnectionAdapters::SQLiteColumn:0x8fc878c @name="created_at", @sql_type="datetime", @null=false, @limit=nil, @precision=nil, @scale=nil, @type=:datetime, @default=nil, @primary=nil, @coder=nil>, #<ActiveRecord::ConnectionAdapters::SQLiteColumn:0x8fc8444 @name="updated_at", @sql_type="datetime", @null=false, @limit=nil, @precision=nil, @scale=nil, @type=:datetime, @default=nil, @primary=nil, @coder=nil>] 
+0

你用“colu”方法测试mn_names“是否存在':shps'这是一个表?也许你可以通过其他工具比Ruby检查(PGAdmin3 PostGreSQL等) – MrYoshiji

回答

1

移民类应该从ActiveRecord::Migration而不是ActiveRecord::Base继承。他们也应该被放置在适当的目录(db/migrate),他们的文件名应该包含适当的时间戳。

要生成迁移与模型中,你应该输入你的控制台:

rails g model Shp url:string price:float 

和运行迁移:

bundle exec rake db:migrate 

BTW为自己方便的时候尽量使类名的详细描述。

+0

这对我工作的感谢。 Shp并不是指商店:) – Melbourne2991

1

这应该工作:

应用程序/模型/ shp.rb:

class Shp < ActiveRecord::Base 
    set_table_name "shps" 
end 

DB /迁移/ 2013xxxxxxxxx_create_shps.rb:

class CreateShps < ActiveRecord::Migration 
    def change 
    create_table(:shps) do |t| 
     t.string :url 
     t.float :price 
     t.timestamps 
    end 
    end 
end 

HTH

+0

这两个类都会放在同一个文件中吗? – Melbourne2991

+0

当然不是,因为你正在使用Ruby on Rails,我想你知道把它们放在哪里(为了清晰起见编辑原始答案)。 –