2016-04-07 14 views
0

Lütfen bana öznitelik modeli tarafından belirlenen dinamik ilişkilendirme bağlantısının nasıl uygulanacağını söyleyin. İki motorum var (Tbitcoin, Tstripe), her biri bir masa ödeme var. Kullanıcı modelinin yönetimi olan pay_currency özelliği vardır.Dernek has_many için dinamik class_name nasıl uygulanır? Aynı tablo için, farklı motorlar

class User < ActiveRecord::Base 

    has_many :payments, ~> { where "pay_currency = 'real'" } , class_name: Tstripe::Payment, foreign_key: :uid 
    has_many :payments, ~> { where "pay_currency = 'bitcoin'" } ,class_name: Tbitcoin::Payment, foreign_key: :uid 
end 

User.last.payments.create kullanarak motoru dinamik olarak belirleme yolları nelerdir?

+0

Bunu yapabileceğinizi düşünmüyorum. En yakın aklıma iki ortak modeliniz STI –

cevap

0

Kullanıcı tarafından pay_currency değerine göre ilgili uygun ödemeleri bulan has_many kuruluşu yerine normal bir yönteme ihtiyacınız olduğunu düşünüyorum. Örnek:

class User < ActiveRecord::Base 
    def payments 
    payment_class = case pay_currency 
    when "real" 
     Tstripe::Payment 
    when "bitcoin" 
     Tbitcoin::Payment 
    end 
    payment_class.for_user(self) 
    end 
end 

class Tstripe::Payment < ActiveRecord::Base 
    belongs_to :user 

    def self.for_user(user) 
    where(user_id: user.uid) 
    end 
end 
+0

olsaydı, bu kadar basit ve harika olurdu. – Alex

İlgili konular