我正在使用Rails的Agile Web Development来了解Rails。在早期的章节中,作者创建了脚手架,然后开始研究迁移。在他的迁移中,有一个“向上”和“向下”的方法,而我在迁移中只有一个“改变”方法。作者正在使用Rails 3.05(或类似的东西),我使用3.1,但是,我不认为这是解释,因为使用另一本书但相同版本的Rails我记得创建一个具有“向上”和“向下”方法......
所以,两个问题,
a)我在迁移中使用不同方法名称的原因是什么?
b)是否会影响功能?
我的迁移
class CreateProducts < ActiveRecord::Migration
def change
create_table :products do |t|
t.string : title
t.text :description
t.string :image_url
t.decimal :price, :precision => 8, :scale => 2
t.timestamps
end
end
end
图书迁移
class CreateProducts < ActiveRecord::Migration
def self.up
create_table :products do |t|
t.string :title
t.text :description
t.string :image_url
t.decimal :price, :precision => 8, :scale => 2
t.timestamps
end
end
def self.down
drop_table :products
end
end
答案 0 :(得分:5)
Rails 3.1取消了迁移的“向上”和“向下”部分。现在它们被称为使用change方法的“可逆迁移”。因此,您的第一个代码示例对于Rails 3.1是正确的,第二个对于3.0.x及更早版本是正确的。以下是浏览此更新的3.1的更改说明:
https://gist.github.com/958283
重要的一点:从模型和构造性迁移生成器生成的迁移文件(例如,add_name_to_users)使用可逆迁移的更改方法,而不是普通的上下方法。
如果您考虑更新,那么更新是有意义的......您不再需要定义“启动”数据库的所有步骤,并且反向输入相同的步骤来“向下”数据库。改变方法足够智能,可以根据一套指令来回转换。
要回答第二个问题,不会改变迁移的工作方式。它仍会根据您的说明更新您的数据存储,跟踪迁移等。这只是描述模型更改的更有效方式。
答案 1 :(得分:0)
相同的代码真的,只是更干(并且稍微可定制)。
这里有一个很好的描述: http://edgerails.info/articles/what-s-new-in-edge-rails/2011/05/06/reversible-migrations/index.html