Neden raylar bir oluşturmak döndü öğesinde otomatik artan sütunu doldurmuyor? Bunu yapmanın daha iyi bir yolu var mı? raylar iseNeden activerecord, oluşturulduktan döndürülen öğeye otomatik arttırma sütunu yerleştirmiyor?
, daha sonra a = Foo.create
yaptığınızda a.id
def up
execute "ALTER TABLE my_table ADD COLUMN my_auto_incrementing_column INTEGER AUTO_INCREMENT not null UNIQUE KEY;"
end
yoluyla oluşturulan bir alan varsa oluşturmak kullandığınızda Sonra bu alan görünmüyor. Ayrıca bir yeniden yükleme kullanmanız gerekir.
a = Foo.create
a.id # not nil
a.my_auto_incrementing_column # nil
a.reload
a.my_auto_incrementing_column # is now populated
Sürüm bilgileri:
$ ruby -v
ruby 1.9.3p484 (2013-11-22 revision 43786) [x86_64-darwin14.5.0]
$ bundle exec rails -v
Rails 3.2.12
$ mysql --version
mysql Ver 14.14 Distrib 5.6.26, for osx10.10 (x86_64) using EditLine wrapper
Bazı arka plan: Bu kod tüm id alanları Uuıdlerin olmasını gerektirir büyük varolan içinde üretim raylar kod temeli uygulanıyor
. Auto_increment sütunu birincil anahtar değildir, çünkü yeni bir harici entegrasyon iş ortağımızın mevcut uzun benzersiz tanımlayıcılarımızı (UUID'ler) kullanarak işleyemediğini fark ettikten sonra eklenmiştir.
Biz yakut bizim sürümünü güncellemek için çalışıyoruz ama biz bu soruna bir çözüm olarak bunun için beklemek istemiyoruz. Ayrıca, activerecord'daki changelogları okuduktan sonra, ruby / rayların gelecekteki herhangi bir versiyonunun bu problem için bir hata düzeltmesi içerdiğini ispatlamıyorum.
Ben artırmak istiyorum kod:
class Foo < ActiveRecord::Base
has_one :object_containing_auto_incrementing_column
def my_method
if self.object_containing_auto_incrementing_column.nil?
self.object_containing_auto_incrementing_column = ObjectContainingAutoIncrementingColumn.create(owner: self)
self.object_containing_auto_incrementing_column.reload
end
self.object_containing_auto_incrementing_column.my_auto_incrementing_column
end
end
Muhtemelen bir kopyası http://stackoverflow.com/a/9534482/531479 – CWitty
@CWitty http://stackoverflow.com/questions/9513739/generate-an-auto-increment-field-in-rails/9534482 # 9534482 bu çözümü tasarlarken çok yardımcı oldu, ancak rayların neden bu hataya sahip olduğunu veya etrafından nasıl geçeceğini açıklamıyor. Ayrıca postgres dayanmaktadır, bu yüzden tavsiyelerin bazıları geçerli olmayan sözdizimine sahiptir. – compiledwrong
Lütfen, 'CREATE TABLE CREATE' tablosunun nasıl göründüğünü düşünüyor. Kodunuzun söylediklerinin doğru bir şekilde tercüme edildiğini görmek istiyorum. –