2016-07-20 22 views
0

Ich habe zwei Klassen, A und B. B gehört zu A und A hat viele Bs.Aufruf einer Klassenmethode aus einer Klasse mit einer Beziehung mit vielen Beziehungen

Ich möchte eine Methode in A aufrufen, die mehrere, aber nicht notwendigerweise alle Instanzen von B betrifft, die zu ihm gehören.

ich versuchte, das Verfahren in B zu setzen und es so nennen:

class A 

    has_many :bs 

    def method_to_update_many(array_of_the_many_attributes) 
     array_of_the_many_attributes.each{ |n| self.bs.find_by(attribute:n).method_to_edit(update) 
    end 
end 


class B 

    belongs_to :a 

    def method_to_edit(update) 

    update_attribute(:attribute, update) 

    end 

    end 

und durch das Verfahren A wie folgt setzen:

class A 
    has_many :bs 
    def update_a_b(b_identifier, update) 
     the_b = self.bs.find_by(identifier: b_identifier) 
     the_b.update_attribute(:attribute, update) 
    end 
end 

class b 
    belongs_to :a 
end 

Es scheint, dass alles, was ich versuche nicht, weil B wird über einen CollectionProxy aufgerufen, wenn er in Bezug auf A aufgerufen wird.

+0

Verwenden Sie einfach 'B.find_by'. –

+0

Ich bin mir nicht ganz sicher, ob ich deine Frage verstehe, aber '# find_by' wird nur einen Datensatz zurückgeben. Sie möchten wahrscheinlich '# where' verwenden – sixty4bit

Antwort

0

Nicht vollständig verstanden, aber ich denke, Sie müssen #where und #update_all verwenden anstelle von #find_by und #update_attribute. Etwas wie

self.bs.where(identifier: b_identifier).update_all(attribute: update)