每次我運行一個rake db:migrate
時,rails決定更改我的schema.rb文件。在某些情況下,這是完全合理的,但在其他一些情況下,似乎是無緣由的。我感到困惑的是,當我從git中提取新遷移和新版本的schema.rb時,然後運行rake db:migrate
。由於此遷移附帶了新版本的schema.rb文件,因此我不應該更新schema.rb。但是,每次都會改變它。發生這種情況時我發現令人難以置信的愚蠢的變化,如:rails無故更改schema.rb
add_index "my_table", ["column1", "column2"], :name => "index_on_some_columns"
到
add_index "my_table", ["column2", "column1"], :name => "index_on_some_columns"
發生這種情況時我只需運行git checkout db/schema.rb
和我的生活下去,但它irkes我沒有盡頭。是否有這樣做的原因,我怎樣才能阻止它做到這一點?
編輯:下面是摘錄從差異
@@ -165,12 +165,11 @@ ActiveRecord::Schema.define(:version => 20130206001907) do
t.column "updated_at", :datetime
- t.column "coordinates", :point, :srid => 4326
@@ -200,15 +199,16 @@ ActiveRecord::Schema.define(:version => 20130206001907) do
t.column "something", :boolean
+ t.column "coordinates", :point, :srid => 4326
+ t.column "random_string", :string
t.column "remote", :string
- t.column "random_string", :string
end
- add_index "my_table", ["id", "foreign_id"], :name => "index_active_my_table_on_foreign_and_id"
- add_index "my_table", ["id", "active"], :name => "index_my_table_on_active_and_id"
- add_index "my_table", ["id", "content_modified_at"], :name => "index_my_table_on_content_modified_at_and_id"
+ add_index "my_table", ["foreign_id", "id"], :name => "index_active_my_table_on_foreign_and_id"
+ add_index "my_table", ["active", "id"], :name => "index_my_table_on_active_and_id"
+ add_index "my_table", ["content_modified_at", "id"], :name => "index_my_table_on_content_modified_at_and_id"
如何在遷移文件中定義此索引? – Novae 2013-02-12 21:58:31
發表您的差異 – cbrulak 2013-02-12 22:14:16
在多種情況下,遷移說'add_index:my_table,[「column2」,「column1」]',但通過git提供的schema.rb有相反的順序:'add_index「my_table」,[「column1」, 「列2」]'。這似乎是一致的,但現在我想知道列的相反順序是如何進入代碼的。這可能是天真的,但這可能與使用linux/mac有關嗎? – wesdotcool 2013-02-12 22:16:10