2016-04-05 21 views
1

sahip olduğunda:raylar 4 Has_many ilişki olmayan çalışma modeli 2 alt sınıflar Rails</p> <p>4. aşağıdaki gibi aşağıdaki sınıflardan devralır, Ar adı verilen bir anomali Kayıt sınıfı kullanıyorum

class RecordBase < ActiveRecord::Base 
    self.abstract_class = true 
end 

class ArAndEcrBase < RecordBase 
    self.abstract_class = true 

    # Relations 
    belongs_to :originator, class_name: 'User', foreign_key: 'originator_id' 
    has_many :attachments 
end 

class Ar < ArAndEcrBase 

end 

I Ar alt sınıfında başka bir kayıt türünü işleyen bir sınıfla bazı ilişkileri paylaşmak ister, ancak has_many ilişkisi çalışmaz.

aşağıdaki çalışır:

> Ar.last.originator 
=> #<User id: 1, ... 

aşağıdaki çöker: Has_many ilişki iyi çalışmıyor Nedense

> Ar.last.attachments 
Mysql2::Error: Unknown column 'attachments.ar_and_ecr_base_id' 

. Bu sütunda için görünmelidir attachments.ar_id ve yanlış bir şey yapıyor muyum değil

attachments.ar_and_ecr_base_id? Yoksa bu bir Rails hatası mı?

class Ar < ArAndEcrBase 
    has_many :attachments  
end 
+0

'inverse_of' seçeneğini kullanmayı denediniz mi? – SomeSchmo

+0

Merhaba Rocco! bu seçeneği hiç duymamıştı. Ayarlanmış çalıştı ama işe yaramadı. Bende aynı hatayı aldım Neyse teşekkürler! – nuno

+0

Atm kod çalışmasının tek yolu, has_many ilişkisini Ar sınıfına taşımaktır: – nuno

cevap

0

sen muhtemelen polymorphic association

gereken birkaç modeller aynı diğer modele ilişkilendirmesi isterseniz:

Atm kod çalışma almak için tek yol, Ar sınıfa Has_many ilişkisini taşımaktır

class Picture < ActiveRecord::Base 
    belongs_to :imageable, polymorphic: true 
end 

class Employee < ActiveRecord::Base 
    has_many :pictures, as: :imageable 
end 

class Product < ActiveRecord::Base 
    has_many :pictures, as: :imageable 
end 
+0

Merhaba! Polimorfik bir ilişki istemiyorum. İlk iki sınıfın herhangi bir tabloyla ilişkili olmadığını unutmayın: self.abstract_class = true, sadece Ar sınıfının aslında bir tablosu vardır. Geri bildirim için Thx olsa! – nuno