Methode wird nicht gefunden

ja hallo erstmal,…

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>

c.should_ignore = “1”
=> “1”

c.should_ignore?
=> true

Woran könnte das liegen?

Danke,
Keep smiling
yanosz

Hallo,

On Nov 8, 2007 3:04 PM, Jan L. [email protected]
wrote:

[contact_combies,contact_interactions,events].each do |c|
  unless c.should_ignore?

undefined method `should_ignore?’ for ContactCombi:Class
c = ContactCombi.new
=> #<ContactCombi:0xb71313f4 @attributes={… }, @new_record=true>

c.should_ignore = “1”

Auch überall getestet? Also nicht nur bei ContactCombi, sondern auch
bei ContactInteractions und Events?

Andreas

Hallo Jan,

Am Thu, 8 Nov 2007 15:04:59 +0100 schrieb Jan L.
[email protected]:

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.

Gruß
Moritz

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. 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.

Viele
Grüße
Gregor

ja hallo erstmal,…

Am Donnerstag, 8. November 2007 schrieb Moritz H.:

Hallo Jan,

Am Thu, 8 Nov 2007 15:04:59 +0100 schrieb Jan L.
[email protected]:
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.

Keep smiling
yanosz

ja hallo erstmal,…

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 :wink:

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