2016-12-05 1 views
0

Je suis complètement confus avec la mise en œuvre has_many: à travers pour l'ensemble de données que j'utilise. J'ai donc deux tables - scheme_master et scheme_detailConfusion avec has_many: à travers

scheme_master a ces champs - id, scheme_detail_id, primary_scheme_id

scheme_detail a un domaine pertinent - id

Chaque schéma dans scheme_master a un schéma principal qui est auto-référentiel à la table scheme_master. Par exemple, le schéma 1 est le schéma primaire des schémas 1,2,3.

codes pertinents sont comme ci-dessous

scheme_master.rb

class SchemeMaster < ActiveRecord::Base 
    has_one :scheme_detail 
    has_many :child_schemes, class_name: "SchemeMaster", 
    foreign_key: :primary_scheme_id, primary_key: :id 
end 

scheme_detail.rb

class SchemeDetail < ActiveRecord::Base 
    belongs_to :scheme_master 
end 

Ma question est de savoir comment puis-je accéder schéma Détails de tout mon enfant régimes?

Actuellement,

SchemeMaster.find(1).child_schemes 

me donne tous les régimes enfants - 1,2,3, mais je veux une association qui renverrait à scheme_detail des child_schemes. Je vous remercie.

+0

juste essayer 'has_many: scheme_details, à travers:: child_schemes' – jvnill

+0

Il jette un niveau de pile erreur trop profonde. :( –

Répondre

1

Tout d'abord, table scheme_masters a scheme_detail_id, vous devez donc changer cette association

class SchemeMaster < ActiveRecord::Base 
    belongs_to :scheme_detail 
end 

class SchemeDetail < ActiveRecord::Base 
    has_one :scheme_master 
end 

Maintenant, pour aller chercher tous les scheme_detail du child_schemes, faire ce

scheme_master = SchemeMaster.includes(child_schemes: :scheme_detail).where(id: 1).first 

Pour récupérer scheme_detail de child_schemes, vous pouvez le faire, scheme_master.child_schemes.first.scheme_detail.

Espérons que ça aide!