ruby-on-rails – 为什么不使用我的ActiveRecord :: Migration子
发布时间:2020-12-17 01:45:51 所属栏目:百科 来源:网络整理
导读:我正在阅读Rails 3 in Action并按顺序执行命令.但是,当我运行命令时 rails new things_i_boughtcd things_i_boughtbundle installrails generate scaffold purchase name:string cost:float 这本书说我应该得到这个代码: class CreatePurchases ActiveRecor
我正在阅读Rails 3 in Action并按顺序执行命令.但是,当我运行命令时
rails new things_i_bought cd things_i_bought bundle install rails generate scaffold purchase name:string cost:float 这本书说我应该得到这个代码: class CreatePurchases < ActiveRecord::Migration def self.up #not created in my code create_table :purchases do |t| t.string :name t.float :cost t.timestamps end end def self.down # not created in my code drop_table :purchases end end 我得到这个代码: class CreatePurchases < ActiveRecord::Migration def change create_table :purchases do |t| t.string :name t.float :cost t.timestamps end end end 为什么不为我创建上下类方法?我正在使用 解决方法
谢谢你读我的书!
正如JacobM和dbalatero已经解释过的,这是Rails 3.1中的一个新功能. Aaron Patterson添加了这一特殊功能,作为简化迁移语法的一种方法.在早期版本的Rails中,您必须按照本书所示进行操作: class CreatePurchases < ActiveRecord::Migration def self.up create_table :purchases do |t| t.string :name t.float :cost t.timestamps end end def self.down drop_table :purchases end end 但这有点重复自己. Aaron创建了一个看起来很好且更简单的迁移语法,只调用了向前迁移所需的方法,但也允许向后迁移(称为“回滚”).使用Rails 3.1语法编写的相同迁移是: class CreatePurchases < ActiveRecord::Migration def change create_table :purchases do |t| t.string :name t.float :cost t.timestamps end end end 因此,当此迁移“向前”运行时,Rails将使用字段创建购买表.当你向后滚动(或“向后”运行)时,Rails会知道丢弃表格. 然而,这种语法并不完全完美,而且你会遇到像change_column这样的方法的问题.当发生这种情况时,最好坚持在迁移中定义def up和def down方法: class CreatePurchases < ActiveRecord::Migration def up change_column :purchases,:cost,:integer end def down change_column :purchases,:float end end 那是因为在这个例子中Rails不知道如何将它切换回以前的类型.我希望这能更好地解释它! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |