SORU
28 EYLÜL 2010, Salı


Bağımlı has_one ilişkiler oluşturmak için Nasıl raylar - En İyi Uygulama:

Has_one ilişkiler oluşturmak için en iyi uygulama nedir bana söyler misiniz?

f.e. eğer kullanıcı bir modeli var, ve bir profil olmalı...

Bunu nasıl yapabilir miyim?

Bir çözüm olurdu:

# user.rb
class User << ActiveRecord::Base
  after_create :set_default_association

  def set_default_association
    self.create_profile
  end
end

Ama bakmıyor çok temiz görünüyor... Herhangi öneriyor?

CEVAP
28 EYLÜL 2010, Salı


En iyi has_one ilişkisi oluşturmak için bir uygulamadır before_create yerine after_create ActiveRecord geri arama kullanmak için. Ya da daha önceki bir geri arama kullanmak ve bu konularda (varsa) çocuğun kendi doğrulama adım bile geçme.

Çünkü:

  • iyi bir kodlama ile, çocuk kaydın doğrulamalarını eğer doğrulaması başarısız olursa kullanıcıya gösterilmesi için fırsat var
  • ana kayıt oluştur () kaydeder sonra temiz ve ActiveRecord tarafından açıkça desteklenen otomatik olarak yüklenecektir çocuk, yabancı anahtar doldurur AR -- rekoru. AR üst kaydı oluşturarak bir parçası olarak çocuk kaydeder.

Nasıl yapmak için:

# in your User model...
has_one :profile
before_create :build_default_profile

private
def build_default_profile
  # build default profile instance. Will use default params.
  # The foreign key to the owning User model is set automatically
  build_profile
  true # Always return true in callbacks as the normal 'continue' state
       # Assumes that the default_profile can **always** be created.
       # or
       # Check the validation of the profile. If it is not valid, then
       # return false from the callback. Best to use a before_validation 
       # if doing this. View code should check the errors of the child.
       # Or add the child's errors to the User model's error array of the :base
       # error item
end

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • B3ASTTY™

    B3ASTTY™

    27 Mayıs 2013
  • taliajoy18

    taliajoy18

    12 Temmuz 2011
  • UrAvgConsumer

    UrAvgConsume

    1 Ocak 2012