2

Wie kann ActiveRecord angewiesen werden, alle links von allen Canvases, die zu bestimmten gehören AdTemplate? Ich habe eine canvases_links Methode dafür erstellt, aber vielleicht ActiveRecord hat einige Assoziationsmethoden, die out-of-the-Box funktionieren?Wie alle zugehörigen Grand-Child-Datensätze abgerufen werden?

class AdTemplate < ActiveRecord::Base 
    has_many :canvas 

    def canvases_links 
     canvas.includes(:links).map do |canva| 
     canva.links 
     end.flatten 
    end  
end 

class Canva < ActiveRecord::Base 
    belongs_to :ad_template 
    has_many :links 
    has_many :close_areas 
end 

class Link < ActiveRecord::Base 
    belongs_to :canva 
end 


a = AdTemplate.find(1) 
a.canvases_links # works okay 
a.active_record_magic_method_links # must return the same data as a.canvases_links method :) 

Antwort

3

Sie können eine Beziehung wie folgt aufbauen:

class AdTemplate < ActiveRecord::Base 
    has_many :links, through: :canvas 

Auf diese Weise können Sie anrufen:

a = AdTemplate.find(1) 
a.links 
# This will build the query joins automatically