加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

为什么不为我创建上下类方法?我正在使用
rails 3.1.1和ruby 1.9.2.

解决方法

谢谢你读我的书!

正如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不知道如何将它切换回以前的类型.我希望这能更好地解释它!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读