ich sitze mal wieder vor einem complex-Form nach RailsCasts 73.
Der Code (im model:)
def save_children
[contact_combies,contact_interactions,events].each do |c|
unless c.should_ignore?
if c.should_destroy?
c.destroy
else
c.save(false)
end
end
end
end
Sollte eigentlich die referenzierten Objekte abspeichern.
Jedoch wirft er den Fehler:
undefined method `should_ignore?’ for ContactCombi:Class
Obwohl in der Klasse ContactCombi diese Methode existiert:
def should_ignore?
should_ignore.to_i == 1
end
und benutzbar ist:
ruby script/console
c = ContactCombi.new
=> #<ContactCombi:0xb71313f4 @attributes={… }, @new_record=true>
def save_children
[contact_combies,contact_interactions,events].each do |c|
unless c.should_ignore?
An dieser Stelle ist c ein AssociationProxy-Objekt, keine Instanz (ich
schließe aus den Namen contact_combies usw. einfach mal, dass es sich um
has_many-Assoziationen handelt). Du benötigst also noch eine weitere
Schleife:
[contact_combies,contact_interactions,events].each do |assoc|
assoc.each do |c|
# usw.
Danke - dass habe ich auch noch nicht gewusst. Ich dachte, dass wären einfach
arrays, die auch diese Art verkettet werden.
Um die Arrays zu verknüpfen musst die sie addieren. Dann würdest du
nicht zwei Schleifen schreiben müssen.
def save_children
(contact_combies + contact_interactions + events).each do |c|
unless c.should_ignore?
if c.should_destroy?
c.destroy
else
c.save(false)
end
end
end
end
Das würde ich aber nicht unbedingt empfehlen, da dabei die
ActiveRecord Association Proxies aufgelöst werden und tatsächlich
Arrays erzeugt werden, die dann in einem großen Array zusammengefasst
werden. Ein bisschen viel Action, nur um eine Schleife zu sparen.
Deshalb bleib besser bei der Variante von Moritz.
Am Donnerstag, 8. November 2007 schrieb Gregor Schmidt:
Hallo,
Danke - dass habe ich auch noch nicht gewusst. Ich dachte, dass wären
einfach arrays, die auch diese Art verkettet werden.
Um die Arrays zu verknüpfen musst die sie addieren.
Args. Ich bin noch zu sehr in Perl
Das würde ich aber nicht unbedingt empfehlen, da dabei die
ActiveRecord Association Proxies aufgelöst werden und tatsächlich
Arrays erzeugt werden, die dann in einem großen Array zusammengefasst
werden.
Ok - das klingt einleuchtend.
Danke,
Keep smiling
yanosz
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.