Varsayılan değeri taşıma veya geri aramada ayarlamak daha iyi midir? Taşıma işleminde silme (veya başka bir ayar) varsayılan değeri zor, ancak modelde kodun bir parçası dahaRaylardaki modeller için varsayılan değerler
cevap
Taşıma işleminde varsayılanları tanımlamak da bazı dezavantajlara sahiptir. Bu sadece Model.new
aradığınızda çalışmaz. , Arka uçta, Genel bir kural olarak
class Model < ActiveRecord::Base
after_initialize :set_defaults, unless: :persisted?
# The set_defaults will only work if the object is new
def set_defaults
self.attribute ||= 'some value'
self.bool_field = true if self.bool_field.nil?
end
end
modellerinde ve DB kısıtlamaları uygulamak:
Bana ayarlanan varsayılan özelliklerini sağlayan after_initialize
geri arama, yazmayı tercih ediyorum. Onaylama JS'si gibidir ve arka taraftaki (PHP, ROR, vb.) Doğrulama yapmaz. Birisi doğrulama işlemini geçmek için JS'nizi değiştirebilir ve arka planda doğrulama yapmadığınız için sitenizde güvenlik açığı olabilir. Bu nedenle, her zaman her iki yönde de doğrulayın, en azından uygulama sunucunuz uzlaşırsa, DB sunucusu bir miktar savunma yapabilir.
Raylar 5'te, attributes API, varsayılan değerlerin belirtilmesine izin verir. Sözdizimi basittir ve bir geçiş olmadan bir varsayılanı değiştirmenize izin verir.
# db/schema.rb
create_table :store_listings, force: true do |t|
t.string :my_string, default: "original default"
end
# app/models/store_listing.rb
class StoreListing < ActiveRecord::Base
attribute :my_string, :string, default: "new default"
end
- 1. Google App Engine'deki Modeller için Varsayılan Değerler
- 2. Boş değerler için varsayılan değerler
- 3. Varsayılan yapıcı olmadan varsayılan değerler
- 4. varsayılan tarih formatını raylardaki yakutta değiştirilsin mi?
- 5. Protokol uzantılarında varsayılan değerler
- 6. OCaml: Fonksiyon argümanları için varsayılan değerler?
- 7. JS: fonksiyonlar argümanlar varsayılan değerler fonksiyonun bağımsız değişkenler için varsayılan değerler ayarlayabilirsiniz Bazı dillerde
- 8. Gelincik - tüm modeller için
- 9. Bir klişedeki varsayılan değerler Yapı
- 10. Plone ve Dexterity: "ilişki" alanı için varsayılan değerler
- 11. Varsayılan eylem, jQuery tarafından raylardaki yakıdaki kısmi veri üzerinde gerçekleştirildi
- 12. Modeller için Ekran Adını Tanımla
- 13. Tüm modeller için SQLAlchemy "event.listen"
- 14. Raylardaki param değişkenler için değişken ekleme
- 15. python: dizin dışı değerler için dizi varsayılan değeri
- 16. maxKoncat üzerinde çalışan tomcat için varsayılan değerler 7
- 17. Bir kütüphane projesinde yapıcı argümanları için varsayılan değerler
- 18. Varchar ve int mysql veri türleri için varsayılan değerler
- 19. Python optparse, varsayılan değerler ve açık seçenekler
- 20. Raylardaki tutturmalarda otomatik ilişkilendirmeler
- 21. Polimorfizm ve varsayılan değerler: birlikte olabilir mi?
- 22. Raylardaki Geçerli Kullanıcı
- 23. İşlev varsayılan bağımsız değişkenleri ve adlandırılmış değerler
- 24. Varlık Framework 4 ve Varsayılan Değerler
- 25. Varsayılan değerler neden UseMethod ile gönderilmiyor?
- 26. Varsayılan değerler C++ cinsinden sabit olmalı mı?
- 27. SQL GROUP BY "varsayılan değerler" ile
- 28. Raylardaki gizli alan
- 29. Raylardaki izinsiz sayım 4
- 30. raylardaki basit json çıkışı
Neden 'before_create'? o zaman, eğer 'before_create' varolan değeri geçersiz kılacağından ve nesnenin değerleri zaten varsa varsayılan değeri ayarlamak istemediğinden, '' inatçı? '' –
@WojciechBednarski 'yi kontrol etmeniz gerekmez. Bu yüzden varsayılan değer sadece nesne yeni ve kalıcı değilken ayarlanıyor. –
'before_create', DB satırında modelin kullanım ömründe yalnızca bir kez patlayacaktır. 'before_update', DB'deki modeli değiştirdiğinizde her zaman tetiklenir. –