Otomatik sıfırlama (1001'den başlayarak) gereken bir alan token_number'i (sadece 1001'den başlayarak) ve yalnızca kullanıcı bunu sağlamazsa, bir Model Token modelim var. Sorun şu ki, kullanıcı bu alanı sağlama seçeneğine sahip olduğundan, veritabanını tam olarak sorgulayamıyorum ve en büyük token_number'i isteyemiyorum. Bu forumda bir cevap buldum, ancak SQL deyimini yürütmekten daha iyi bir yolu olması gerektiğinden eminim. Auto increment a non-primary key field in Ruby on RailsRaylarda bir otomatik artış alanı oluşturun
14
A
cevap
12
İlginç soru, benim için. Ne yazık ki, raylar sütunları otomatik olarak arttırmak için bir yol sağlamaz, bu yüzden küçük otomasyon ile SQL'e başvurmalıyız. Benim veritabanı olarak PostgreSQL kullanarak Rails 3.0.7 bu denenmiş ve nasıl çalıştığını ve bu yararlı olacağını umuyoruz: kuruluyor token_number ihtimali olmadığından, PGSql Documentation
class CreateTokens < ActiveRecord::Migration
def self.up
create_table :tokens do |t|
t.string :name
t.integer :token_number
t.timestamps
end
execute "CREATE SEQUENCE tokens_token_number_seq START 1001"
end
def self.down
drop_table :tokens
execute "DROP SEQUENCE tokens_token_number_seq"
end
end
Şimdi
token_number için sıra oluşturma Kullanıcı tarafından manuel olarak, yalnızca ayarlanmamışsa token_number değerini oluşturmamız gerekir. Read about Callbacks here. Bununla, bir örnek çalıştırma var. Lütfen ilk jeton için token_number ayarlamam ve token_number dizisini ve ikincisini atadığımı unutmayın.
ruby-1.9.2-p0 > token = Token.new
=> #<Token id: nil, name: nil, token_number: nil, created_at: nil, updated_at: nil>
ruby-1.9.2-p0 > token.save
SQL (0.8ms) BEGIN
SQL (1.7ms) SELECT nextval('tokens_token_number_seq')
SQL (6.6ms) SELECT tablename
FROM pg_tables
WHERE schemaname = ANY (current_schemas(false))
SQL (33.7ms) INSERT INTO "tokens" ("name", "token_number", "created_at", "updated_at") VALUES (NULL, 1001, '2012-03-02 12:04:00.848863', '2012-03-02 12:04:00.848863') RETURNING "id"
SQL (15.9ms) COMMIT
=> true
ruby-1.9.2-p0 > token = Token.new
=> #<Token id: nil, name: nil, token_number: nil, created_at: nil, updated_at: nil>
ruby-1.9.2-p0 > token.token_number = 3000
=> 3000
ruby-1.9.2-p0 > token.save
SQL (0.8ms) BEGIN
SQL (1.5ms) INSERT INTO "tokens" ("name", "token_number", "created_at", "updated_at") VALUES (NULL, 3000, '2012-03-02 12:04:22.924834', '2012-03-02 12:04:22.924834') RETURNING "id"
SQL (19.2ms) COMMIT
=> true
ruby-1.9.2-p0 >
İlgili konular
- 1. Otomatik Artış Sütunu Algıla
- 2. Firebird veritabanında otomatik artış alanı oluşturmanın en kolay yolu
- 3. Spring @GeneratedValue ek açıklamaları, Otomatik artış alanı için çalışmıyor
- 4. Cassandra sütun tuşu otomatik artış
- 5. Özel yönergede otomatik artış değeri
- 6. Mevcut mysql tablosundan raylarda geçiş dosyaları oluşturun
- 7. MySQL otomatik artış ile tabloya eklemek
- 8. Fırtına yapılandırmasında otomatik artış işaretinin amacı
- 9. Raylarda bir tablo oluşturun ve yabancı anahtar kısıtlaması ekleyin
- 10. Ay, gün ve yıl kullanarak raylarda bir datetime oluşturun
- 11. Raylarda ad alanı içinde denetleyici oluşturma
- 12. Veritabanı kullanılarak otomatik metin alanı otomatik tamamlama alanı
- 13. otomatik doldurma giriş alanı başka bir giriş alanı değeri ile
- 14. Raylar geçişi ile eksik otomatik artış özniteliği yaratın
- 15. Laravel 5.2 elverişli otomatik artış pgsql istisnası aynı kimlik üzerinde
- 16. SQL Server Express Management Studio üzerinden otomatik artış ayarlanamıyor mu?
- 17. SQLite veritabanında otomatik artış sütunu nasıl yeniden verilir?
- 18. Yii2 ArrayHelper içinde concate otomatik artış alfabe :: map()
- 19. Güzel Yazıcı Otomatik Olarak Program Oluşturun
- 20. Sadece bir etki alanı ve kullanıcı adı kullanarak WindowsIdentity oluşturun
- 21. Otomatik güncelleştirme gantt grafiği oluşturun google tablo
- 22. Raylarda
- 23. Raylarda sanal özellikler 4
- 24. Python, bir soket oluşturun ve otomatik olarak yeniden bağlayın
- 25. Realm Auto Increament alanı örneği
- 26. Artış yığın boyutu
- 27. Django'da Artış Sayfa Sayısı
- 28. Artış mevcut tarih
- 29. Mongoose - findOne ile artış
- 30. Artış Satır Numarası Grupta
Geri aramaları kullanmaktan kaçınmak için bir şekilde 'nextval' ile birlikte varsayılan değeri kullanmak mümkün mü? – freemanoid