2011-03-17 15 views
5

Ben bir tablo oluşturmak için bir Raylar göç yazıyorum updated_at karşı: Bu aşağıdaki tabloda sonuçlanırRaylar damgaları: updated_on/created_on created_at/

create_table(TABLE, :options => FEDERATED_TABLE_CONFIG % TABLE) do |table| 
    table.timestamps 
    table.string :country_tld 
end 

: Trajik

CREATE TABLE `sites` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `created_at` datetime DEFAULT NULL, 
    `updated_at` datetime DEFAULT NULL, 
    `country_tld` varchar(255) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=FEDERATED DEFAULT CHARSET=utf8 CONNECTION='mysql://foo:[email protected]/baz/sites' 

, benim yabancı veri kaynağı, zaman damgaları için eski okul Rails updated_on ve created_on sütunlarını kullanır. Tabii ki bu sorunun üstesinden gelebilirsiniz:

create_table(TABLE, :options => FEDERATED_TABLE_CONFIG % TABLE) do |table| 
    table.datetime :created_on, :updated_on 
    table.string :country_tld 
end 

hala istediğim davranışı damgaları kullanmak ve almak için önemsiz bir yol varsa, bu konuda duymak isteriz. Ve hayır, sadece bir göçü etkilediğini düşünürsek, monkey-patching ActiveRecord::Timestamp'u önemsiz bir şekilde düşünmüyorum. ;) timestamps için

cevap

8

Sorunun ne olduğundan emin olmadığından emin değilim. ActiveRecord::Timestamp, _at sürümleriyle aynı created_on ve updated_on sütunlarını kullanır (Bkz. Satırlar 84 & 88).

Bir kenara göre, bir tek linerdaki süreleri oluşturmak için bir diziden geçmeniz gerekmez. Bunu kullan:

table.datetime :created_on, :updated_on 
+0

sayesinde, sana [ "seksi sözdizimi"] (http://guides.rubyonrails.org/migrations.html#creating- ile aynı anda birden çok sütun oluşturabilir bilmiyordum bir masa). –

+1

Sorum şu: Eski stil sütunlarını oluşturmak için # timestamps yardımcıını kullanabilir miyim? –

5

raylar kaynağıdır:

def add_timestamps(table_name) 
    add_column table_name, :created_at, :datetime 
    add_column table_name, :updated_at, :datetime 
end 

Yani sütun adları özelleştirmek için hiçbir yolu yoktur görebilirsiniz. Dürüst olmak gerekirse, önerdiğiniz en iyi yoldur. Ben şahsen böyle şeyler kaçının:

%w{created_on updated_on}.each {|col| table.datetime col.to_sym } 

Ve sadece gerçek add_column komutları yazmak, okumak için daha ayrıntılı biraz da daha kolaydır.

İlgili konular